Memesan Keputusan MySQL Berdasarkan "Padanan Terbaik"
Dalam senario ini, matlamatnya adalah untuk meningkatkan pertanyaan carian langsung MySQL untuk mengutamakan hasil di mana istilah carian berlaku lebih awal dalam perkataan.
Pada masa ini, pertanyaan mengisih hasil mengikut abjad:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
Untuk mencapai pengisihan yang diingini, kami boleh memperkenalkan logik bersyarat untuk membezakan antara kedudukan istilah carian dalam hasil carian.
Isih mengikut Mula, Tengah, Akhir Kata
Untuk mengatur keputusan yang padanan pada permulaan perkataan diutamakan, kita boleh menggunakan perkara berikut pertanyaan:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
Pertanyaan ini memberikan pemberat pada setiap hasil: 1 untuk padanan sempurna bermula dengan istilah carian, 3 untuk padanan di mana-mana dalam perkataan dan 2 sebaliknya. Pemberat ini menentukan susunan pengisihan.
Isih Mengikut Kedudukan Rentetan Padanan
Jika kita ingin memesan keputusan berdasarkan kedudukan tepat perlawanan, kita boleh memanfaatkan Fungsi LOCATE:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Pertanyaan ini mengira kedudukan istilah carian dalam setiap hasil carian dan mengisih sewajarnya.
Mengendalikan Hubungan
Dalam kes di mana berbilang keputusan mempunyai skor atau kedudukan yang sama, kami boleh memperkenalkan kriteria pengisihan sekunder:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
Dengan menggantikan
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memesan Hasil Carian MySQL mengikut 'Padanan Terbaik' Berdasarkan Kedudukan Istilah Carian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!