Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengekalkan Susunan Nilai dalam Pertanyaan MySQL `IN`?

Bagaimana untuk Mengekalkan Susunan Nilai dalam Pertanyaan MySQL `IN`?

Mary-Kate Olsen
Lepaskan: 2024-12-26 08:39:13
asal
806 orang telah melayarinya

How to Preserve the Order of Values in a MySQL `IN` Query?

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);
Salin selepas log masuk

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  |
+----+--------+
Salin selepas log masuk

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);
Salin selepas log masuk

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  |
+----+--------+
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan