Heim  >  Artikel  >  Datenbank  >  Wie ordne ich mithilfe der MySQL-CASE-Anweisung nach dem früheren Zeitstempel aus zwei Spalten?

Wie ordne ich mithilfe der MySQL-CASE-Anweisung nach dem früheren Zeitstempel aus zwei Spalten?

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 15:13:02366Durchsuche

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

MYSQL ORDER BY CASE-Problem

In MySQL können Sie mit der CASE-Anweisung innerhalb der ORDER BY-Klausel mehrere Sortierkriterien basierend auf angeben besondere Bedingungen. Beim Versuch, zwei verschiedene Zeitstempelspalten so zu sortieren, als wären sie ein einziger, einheitlicher Zeitstempel, treten jedoch Herausforderungen auf.

Beachten Sie die bereitgestellte Tabellenstruktur:

-------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------

Das Ziel besteht darin, die Zeilen zu ordnen durch den früheren Zeitstempel, unabhängig davon, ob er in der Spalte timestamp_one oder timestamp_two gespeichert ist. Die folgende Abfrage versucht, dies mithilfe der CASE-Anweisung zu erreichen:

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

Während diese Abfrage die Zeilen für id_one=27 erfolgreich korrekt ordnet, gelingt es ihr nicht, die Zeitstempel in einem einzigen Sortierkriterium zu kombinieren.

Um dieses Problem zu beheben, kann die Abfrage wie folgt geändert werden:

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 

Durch die Verwendung eines einzelnen CASE-Ausdrucks anstelle separater CASE-Anweisungen für jede Bedingung führt MySQL die Zeitstempel in einem einzigen Sortierkriterium zusammen. Dadurch wird sichergestellt, dass die Zeilen wie gewünscht korrekt angeordnet sind:

-------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------

Das obige ist der detaillierte Inhalt vonWie ordne ich mithilfe der MySQL-CASE-Anweisung nach dem früheren Zeitstempel aus zwei Spalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn