Memahami Pesanan Bersyarat dengan PESANAN OLEH
Dalam pertanyaan pangkalan data, klausa ORDER BY membenarkan anda mengisih hasil pertanyaan anda dalam yang ditentukan pesanan. Walau bagaimanapun, dalam sesetengah kes, anda mungkin perlu menggunakan pesanan bersyarat berdasarkan nilai lajur tertentu.
Masalah: Isih Mengikut Lajur Berbeza Berdasarkan Jenis
Pertimbangkan senario di mana anda mempunyai jadual dengan lajur yang dipanggil "Jenis" yang menentukan sama ada baris sepadan dengan Ahli atau Kumpulan. Anda ingin mengisih keputusan supaya baris Ahli diisih mengikut nama keluarga mereka (LNAME) dalam tertib menaik, manakala baris Kumpulan diisih mengikut nama kumpulan mereka (GROUPNAME) dalam tertib menaik.
Percubaan Salah : Menggunakan Operator Logik
Percubaan yang disediakan menggunakan operator logik (jika, atau) untuk mencipta pernyataan bersyarat, mengakibatkan pertanyaan yang salah:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Penyelesaian: Menggunakan Fungsi IF atau Penyata CASE
Untuk mencapai pesanan bersyarat ini, anda boleh menggunakan fungsi IF atau pernyataan CASE:
Fungsi IF:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
Ini menggunakan fungsi IF untuk menentukan lajur mana yang hendak digunakan untuk mengisih berdasarkan nilai lajur TYPE.
Kenyataan KES:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
Ini menggunakan pernyataan CASE untuk menilai nilai lajur TYPE dan mengembalikan lajur yang sesuai untuk pengisihan. Klausa ELSE dengan nilai 1 memastikan bahawa baris dengan jenis yang tidak diketahui diisih hingga akhir.
Atas ialah kandungan terperinci Bagaimana Mengisih Keputusan Pangkalan Data mengikut Lajur Berbeza Berdasarkan Syarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!