Bolehkah anda Sertakan Pernyataan "Jika" dalam ORDER BY?
Dalam SQL, klausa ORDER BY digunakan untuk mengisih hasil pertanyaan dalam tertib menaik atau menurun. Namun, bagaimana jika anda ingin menggunakan kriteria pengisihan yang berbeza berdasarkan syarat?
Cabarannya:
Andaikan anda mempunyai jadual dengan lajur yang dipanggil "Jenis" yang menunjukkan sama ada rekod mewakili "Ahli" atau "Kumpulan." Anda ingin memesan keputusan mengikut nama keluarga ahli jika jenisnya ialah "Ahli" dan mengikut nama kumpulan jika jenisnya ialah "Kumpulan."
Percubaan Salah:
Seseorang mungkin pada mulanya mencuba pertanyaan berikut:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Penyelesaian Betul:
Sebaliknya, terdapat dua pendekatan yang berdaya maju:
1. Fungsi IF:
Fungsi IF MySQL membenarkan anda menilai secara bersyarat sesuatu ungkapan dan mengembalikan satu nilai jika syarat itu benar dan nilai lain jika ia palsu. Begini cara menggunakannya secara ORDER BY:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
2. Penyata KES:
Penyata CASE menyediakan cara yang lebih fleksibel untuk mengendalikan berbilang keadaan. Ia menilai keadaan dan mengembalikan nilai khusus untuk setiap kes yang sepadan. Keputusan pernyataan CASE menjadi kriteria pengisihan:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
Nota:
Dalam pernyataan CASE, "ELSE 1" memastikan bahawa rekod tanpa padanan nilai jenis diisih pada penghujung.
Atas ialah kandungan terperinci Bolehkah Anda Mengisih Data Secara Dinamik dalam SQL Berdasarkan Keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!