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

Barbara Streisand
Lepaskan: 2024-11-10 15:13:02
asal
363 orang telah melayarinya

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 |
-------------------------------------------------------------------
Salin selepas log masuk

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
Salin selepas log masuk

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 
Salin selepas log masuk

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 |
-------------------------------------------------------------------
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan