Memelihara Jujukan dalam Pertanyaan "IN" MySQL
Dalam MySQL, pengendali "IN" memilih rekod yang sepadan dengan sebarang nilai dalam senarai yang disediakan . Secara lalai, keputusan dikembalikan dalam susunan yang ditakrifkan oleh algoritma pengisihan pangkalan data, yang mungkin tidak sentiasa sejajar dengan urutan yang dinyatakan dalam pertanyaan.
Mari kita pertimbangkan contoh berikut:
SELECT * FROM foo f WHERE f.id IN (2, 3, 1);
Pertanyaan ini bertujuan untuk mendapatkan semula rekod dengan ID 2, 3 dan 1. Walau bagaimanapun, keputusan biasanya dipesan mengikut ID menaik:
+----+--------+ | id | name | +----+--------+ | 1 | first | | 2 | second | | 3 | third | +----+--------+
Untuk mengekalkan jujukan yang dinyatakan dalam pertanyaan, kami perlu menyusun keputusan secara eksplisit. Fungsi ORDER BY FIELD() boleh mencapai ini.
SELECT * FROM foo f WHERE f.id IN (2, 3, 1) ORDER BY FIELD(f.id, 2, 3, 1);
Fungsi FIELD() mengambil nilai sebagai argumen pertama dan senarai nilai sebagai argumen yang tinggal. Ia mengembalikan kedudukan nilai dalam senarai. Contohnya, FIELD(2, 2, 3, 1) mengembalikan 1 kerana 2 ialah nilai pertama dalam senarai.
Dengan memesan keputusan mengikut FIELD(f.id, 2, 3, 1), kita arahkan MySQL terlebih dahulu mengisih rekod mengikut nilai pertama (2), kemudian dengan nilai kedua (3), dan akhirnya dengan nilai ketiga (1). Urutan ini memastikan bahawa keputusan dikembalikan dalam susunan yang sama seperti yang dipaparkan dalam pertanyaan.
+----+--------+ | id | name | +----+--------+ | 2 | second | | 3 | third | | 1 | first | +----+--------+
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Susunan Nilai dalam Pertanyaan MySQL `IN`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!