Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memesan oleh Cap Masa Terdahulu daripada Dua Lajur Menggunakan Penyata MySQL CASE?

Bagaimana untuk Memesan oleh Cap Masa Terdahulu daripada Dua Lajur Menggunakan Penyata MySQL CASE?

Barbara Streisand
Barbara Streisandasal
2024-11-10 15:13:02435semak imbas

How to Order by the Earlier Timestamp from Two Columns Using MySQL CASE Statement?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn