Isih Dinamik dengan Pernyataan Bersyarat
Dalam senario ini, kami berhasrat untuk mengubah suai klausa ORDER BY berdasarkan nilai yang disimpan dalam lajur tertentu , seperti "Jenis." Inilah cabarannya:
Penyelesaian dengan Fungsi IF
Pada mulanya, anda mencadangkan pertanyaan berikut:
SELECT * FROM table WHERE STATUS = 'Active' ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Walau bagaimanapun, pendekatan ini tidak betul. Sebaliknya, kita boleh menggunakan fungsi IF dalam MySQL seperti berikut:
ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
Penyelesaian Alternatif dengan Penyata CASE
Pilihan lain ialah menggunakan pernyataan CASE, yang menawarkan fleksibiliti yang lebih besar:
ORDER BY CASE `type` WHEN 'Member' THEN LNAME WHEN 'Group' THEN GROUPNAME ELSE 1 END ASC
Penyata CASE menilai lajur Jenis dan mengembalikan nilai pengisihan yang sesuai berdasarkan syarat. Hasil blok CASE kemudiannya digunakan untuk mengisih.
Perhatikan bahawa klausa ELSE boleh digunakan untuk mengendalikan sebarang nilai lain yang tidak dinyatakan secara eksplisit dalam klausa WHEN. Dalam kes kami, kami telah menetapkan nilai 1 untuk mengendalikan senario ini bagi memastikan ia muncul terakhir dalam hasil yang diisih.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Data Secara Dinamik Berdasarkan Nilai Lajur dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!