MYSQL ORDER BY CASE Issue
Dalam MySQL, menggunakan pernyataan CASE dalam klausa ORDER BY membolehkan anda menentukan berbilang kriteria pengisihan berdasarkan syarat-syarat tertentu. Walau bagaimanapun, cabaran timbul apabila cuba mengisih dua lajur cap masa yang berbeza seolah-olah ia adalah satu cap masa yang disatukan.
Pertimbangkan struktur jadual yang disediakan:
------------------------------------------------------------------- | id_one | id_two | timestamp_one | timestamp_two | ------------------------------------------------------------------- | 27 | 35 | 09:30 | NULL | | 35 | 27 | NULL | 09:35 | | 27 | 35 | 09:34 | NULL | | 35 | 27 | NULL | 09:33 | -------------------------------------------------------------------
Matlamatnya adalah untuk memesan baris oleh cap masa yang lebih awal, tidak kira sama ada ia disimpan dalam lajur cap masa_satu atau cap masa_dua. Pertanyaan berikut cuba mencapai ini menggunakan pernyataan CASE:
SELECT * FROM tablename WHERE id_one=27 OR id_two=27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one END DESC, CASE WHEN id_two=27 THEN timestamp_two END DESC
Sementara pertanyaan ini berjaya menyusun baris dengan betul untuk id_one=27, ia gagal untuk menggabungkan cap masa menjadi satu kriteria pengisihan.
Untuk menyelesaikan isu ini, pertanyaan boleh diubah suai sebagai berikut:
SELECT id_one, id_two, timestamp_one, timestamp_two FROM tablename WHERE id_one = 27 OR id_two = 27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one WHEN id_two=27 THEN timestamp_two END DESC
Dengan menggunakan satu ungkapan CASE dan bukannya pernyataan CASE yang berasingan untuk setiap syarat, MySQL menggabungkan cap masa ke dalam satu kriteria pengisihan tunggal. Ini memastikan bahawa baris disusun dengan betul, seperti yang dikehendaki:
------------------------------------------------------------------- | id_one | id_two | timestamp_one | timestamp_two | ------------------------------------------------------------------- | 27 | 35 | 09:30 | NULL | | 35 | 27 | NULL | 09:33 | | 27 | 35 | 09:34 | NULL | | 35 | 27 | NULL | 09:35 | -------------------------------------------------------------------
Atas ialah kandungan terperinci Bagaimana untuk Memesan oleh Cap Masa Terdahulu daripada Dua Lajur Menggunakan Penyata MySQL CASE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!