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!