Pemesanan MySQL dalam Fungsi IN()
Apabila melaksanakan pertanyaan dengan klausa IN(), adalah wajar untuk mengisih memulangkan item berdasarkan pesanan yang disediakan dalam fungsi tersebut. Secara lalai, MySQL tidak menjamin pesanan ini.
Pertimbangkan contoh berikut:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
Output yang dijangkakan mungkin diisih mengikut susunan nilai dimasukkan ke dalam fungsi IN():
id | name |
---|---|
5 | B |
6 | B |
1 | D |
15 | E |
17 | E |
9 | C |
18 | C |
Sebaliknya, MySQL mungkin menggunakan algoritma pengisihannya sendiri, yang boleh menghasilkan pesanan.
Penyelesaian:
Untuk memastikan susunan yang dikehendaki, MySQL menyediakan fungsi FIELD(). Fungsi ini mengambil rentetan dan satu siri rentetan dan mengembalikan kedudukan rentetan pertama dalam argumen seterusnya.
Dengan menggunakan FIELD(), anda boleh mengisih output seperti berikut:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
Pertanyaan ini memastikan bahawa baris dikembalikan dalam susunan yang dinyatakan dalam IN() fungsi.
Pengoptimuman Prestasi:
Walaupun fungsi FIELD() memenuhi fungsi yang diingini, adalah penting untuk mempertimbangkan implikasi prestasi. Untuk set data yang besar, menggunakan lajur diindeks yang direka khusus untuk pengisihan boleh meningkatkan prestasi dengan ketara.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mengawal Susunan Keputusan dalam Fungsi MySQL IN()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!