Heim >Datenbank >MySQL-Tutorial >Wie ordne ich MySQL-Zeilen basierend auf mehreren Zeitstempelspalten mit bedingter Sortierung?
MySQL ORDER BY CASE-Anweisungsproblem: Sortieren mehrerer Zeitstempelspalten
In MySQL wird die ORDER BY-Klausel häufig zum Sortieren der Ergebnisse von verwendet eine Abfrage basierend auf einer bestimmten Spalte. Beim Umgang mit mehreren Spalten, die bedingt geordnet werden müssen, entsteht jedoch häufig eine Herausforderung.
Stellen Sie sich das folgende Szenario vor: Sie haben eine Datenbanktabelle mit einer solchen Struktur:
------------------------------------------------------------------- | 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 | -------------------------------------------------------------------
Das Ziel besteht darin, alle vier Zeilen abzurufen und sie unter Berücksichtigung spezifischer Bedingungen sowohl nach timestamp_one als auch nach timestamp_two zu ordnen. Insbesondere wenn id_one gleich 27 ist, sollten die Zeilen nach timestamp_one sortiert werden; andernfalls, wenn id_two gleich 27 ist, sollten sie nach timestamp_two geordnet werden.
Um dies zu erreichen, verwenden viele Versuche die CASE-Anweisung in der ORDER BY-Klausel, wie zum Beispiel:
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
While Dieser Ansatz führt zu der gewünschten Reihenfolge für einzelne Zeilen. Die beiden Zeitstempelspalten können jedoch nicht zu einer einheitlichen Reihenfolge kombiniert werden, da sie nicht als eine einzige betrachtet werden Entität.
Lösung:
Um die Zeilen wie gewünscht zu ordnen, können wir eine modifizierte Version der CASE-Anweisung in der ORDER BY-Klausel 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
Diese Änderung behandelt sowohl timestamp_one als auch timestamp_two als eine einzelne Entität und ordnet die Zeilen entsprechend an. Die CASE-Anweisung weist beiden Zeitstempelspalten basierend auf den in der WHERE-Klausel angegebenen Bedingungen eine absteigende Reihenfolge zu und stellt so sicher, dass die Zeilen als Ganzes geordnet sind.
Das obige ist der detaillierte Inhalt vonWie ordne ich MySQL-Zeilen basierend auf mehreren Zeitstempelspalten mit bedingter Sortierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!