Bolehkah Anda Memesan dengan Penyata Bersyarat?
Dalam SQL, klausa ORDER BY membenarkan anda untuk menentukan susunan keputusan anda dikembalikan. Walau bagaimanapun, bagaimana jika anda ingin mengisih hasil anda secara dinamik berdasarkan keadaan tertentu?
Masalah:
Seorang pengguna ingin mengisih data secara berbeza bergantung pada nilai dalam lajur yang dipanggil "Jenis." Jika Jenis ialah 'Ahli,' mereka mahu mengisih mengikut nama keluarga dan jika 'Kumpulan', mereka mahu mengisih mengikut nama kumpulan, kedua-duanya dalam tertib menaik.
Pendekatan Awal:
Pengguna cuba menggunakan pernyataan if dalam ORDER BY klausa:
ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Penyelesaian:
Walaupun konsepnya betul, SQL tidak menyokong jika pernyataan dalam klausa ORDER BY. Sebaliknya, anda boleh menggunakan sama ada fungsi IF atau pernyataan CASE.
Menggunakan Fungsi IF:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
Pendekatan ini menggunakan fungsi IF untuk menilai keadaan dan kembalikan medan pengisihan yang sesuai.
Menggunakan KES Pernyataan:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
Penyata CASE menyediakan cara yang lebih komprehensif untuk mengendalikan berbilang keadaan dan mengembalikan medan pengisihan berbeza berdasarkan setiap syarat.
Atas ialah kandungan terperinci Bagaimanakah Anda Mengisih Data Secara Dinamik Berdasarkan Pernyataan Bersyarat dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!