Heim >Datenbank >MySQL-Tutorial >Wie ordne ich Zeilen basierend auf mehreren Zeitstempelspalten in MySQL mit der CASE-Anweisung an?
MYSQL ORDER BY CASE-Problem
Diese Frage stellt eine Herausforderung beim Ordnen von Zeilen basierend auf bestimmten Spalten abhängig von einer WHERE-Bedingung dar. Betrachten Sie die bereitgestellte Datenbank mit vier Zeilen und Zeitstempelspalten. Das Ziel besteht darin, die Zeilen so zu ordnen, dass beide Zeitstempelspalten als ein einziges Sortierkriterium behandelt werden.
Die bereitgestellte Abfrage sortiert zunächst die Zeitstempel basierend auf den Feldern id_one und id_two separat:
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
Dieser Ansatz führt zu einer Ausgabe, bei der die Zeilen innerhalb jeder id_one- oder id_two-Gruppe sortiert sind, jedoch nicht als kombinierte Zeitstempelreihenfolge.
Um die gewünschte Reihenfolge zu erreichen, können wir eine leicht modifizierte Abfrage verwenden:
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
In dieser überarbeiteten Abfrage werden sowohl timestamp_one als auch timestamp_two für die Reihenfolge berücksichtigt, unabhängig davon, welche ID-Spalte mit der WHERE-Bedingung übereinstimmt. Die CASE-Anweisung wählt den entsprechenden Zeitstempel basierend auf den Werten id_one und id_two aus.
Diese Änderung führt zur gewünschten Ausgabe, bei der die Zeilen als einzelne Zeitstempelspalte geordnet werden, wobei sowohl timestamp_one als auch timestamp_two berücksichtigt werden:
Das obige ist der detaillierte Inhalt vonWie ordne ich Zeilen basierend auf mehreren Zeitstempelspalten in MySQL mit der CASE-Anweisung an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!