MySQL ORDER BY CASE Isu Isih
Dalam MySQL, klausa ORDER BY membenarkan anda mengisih hasil pertanyaan berdasarkan lajur yang ditentukan. Walau bagaimanapun, anda mungkin menghadapi kesukaran semasa mengisih berbilang lajur yang bergantung pada keadaan tertentu.
Pertimbangkan senario berikut:
Anda mempunyai jadual dengan dua lajur, cap waktu_satu dan cap masa_dua. Anda perlu mendapatkan semula semua baris yang sama ada id_one atau id_two adalah sama dengan 27. Selain itu, anda ingin mengisih hasil berdasarkan sama ada timestamp_one atau timestamp_two bergantung pada sama ada id_one atau id_two ialah 27.
Sedangkan pertanyaan berikut dengan betul mendapatkan semula yang diperlukan baris:
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
Ia mengisih baris mengikut setiap lajur secara individu, dan bukannya menggabungkannya ke dalam satu cap masa untuk mengisih.
Untuk menyelesaikan isu ini, anda boleh menggunakan pertanyaan yang diubah suai 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
Dalam pertanyaan yang diubah suai ini, kami memudahkan klausa ORDER BY dengan menggunakan satu ungkapan CASE untuk tentukan susunan pengisihan. Ini membolehkan kami mengisih baris berdasarkan cap waktu gabungan yang memilih lajur yang sesuai secara dinamik (cap_satu atau cap_dua) bergantung pada nilai id_satu dan id_dua.
Atas ialah kandungan terperinci Bagaimana untuk Mengisih Baris Berdasarkan Cap Masa Bersyarat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!