Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memesan Baris MySQL Berdasarkan Berbilang Lajur Cap Masa dengan Isih Bersyarat?

Bagaimana untuk Memesan Baris MySQL Berdasarkan Berbilang Lajur Cap Masa dengan Isih Bersyarat?

Mary-Kate Olsen
Lepaskan: 2024-11-16 02:37:03
asal
958 orang telah melayarinya

How to Order MySQL Rows Based on Multiple Timestamp Columns with Conditional Sorting?

MySQL ORDER BY CASE Statement Isu: Memesan Berbilang Lajur Cap Waktu

Dalam MySQL, klausa ORDER BY biasanya digunakan untuk mengisih hasil pertanyaan berdasarkan lajur tertentu. Walau bagaimanapun, apabila berurusan dengan berbilang lajur yang perlu dipesan secara bersyarat, cabaran biasa timbul.

Pertimbangkan senario berikut: anda mempunyai jadual pangkalan data dengan struktur seperti itu:

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27     | 35     |    9:30      |     NULL     |
-------------------------------------------------------------------
| 35     | 27     |     NULL     |    9:35      |
-------------------------------------------------------------------
| 27     | 35     |    9:34      |     NULL     |
-------------------------------------------------------------------
| 35     | 27     |     NULL     |    9:33      |
-------------------------------------------------------------------
Salin selepas log masuk

Matlamatnya adalah untuk mendapatkan semula keempat-empat baris dan menyusunnya mengikut cap waktu_satu dan cap_dua masa sambil mempertimbangkan syarat tertentu. Khususnya, jika id_one bersamaan dengan 27, baris hendaklah dipesan mengikut timestamp_one; sebaliknya, jika id_two bersamaan dengan 27, ia harus dipesan dengan timestamp_two.

Untuk mencapai ini, banyak percubaan untuk menggunakan pernyataan CASE dalam klausa ORDER BY, seperti:

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 pendekatan ini menghasilkan susunan yang diingini untuk baris individu, ia gagal untuk menggabungkan dua cap masa lajur ke dalam susunan bersatu, kerana ia tidak dianggap sebagai satu entiti.

Penyelesaian:

Untuk memesan baris seperti yang dikehendaki, kami boleh menggunakan versi yang diubah suai pernyataan CASE dalam klausa ORDER BY:

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

Pengubahsuaian ini memperlakukan kedua-dua cap waktu_satu dan timestamp_two sebagai entiti tunggal dan memesan baris dengan sewajarnya. Pernyataan CASE memberikan susunan menurun kepada kedua-dua lajur cap masa berdasarkan syarat yang dinyatakan dalam klausa WHERE, memastikan baris disusun secara keseluruhan.

Atas ialah kandungan terperinci Bagaimana untuk Memesan Baris MySQL Berdasarkan Berbilang Lajur Cap Masa dengan Isih Bersyarat?. 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