MySQL ORDER BY CASE-Sortierproblem
In MySQL können Sie mit der ORDER BY-Klausel Abfrageergebnisse basierend auf angegebenen Spalten sortieren. Beim Sortieren mehrerer Spalten, die von einer bestimmten Bedingung abhängen, können jedoch Schwierigkeiten auftreten.
Stellen Sie sich das folgende Szenario vor:
Sie haben eine Tabelle mit zwei Spalten, timestamp_one und timestamp_two. Sie müssen alle Zeilen abrufen, in denen entweder id_one oder id_two gleich 27 ist. Darüber hinaus möchten Sie die Ergebnisse basierend auf timestamp_one oder timestamp_two sortieren, je nachdem, ob id_one oder id_two 27 ist.
Während die folgende Abfrage korrekt ist ruft die erforderlichen Zeilen ab:
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
Es sortiert die Zeilen nach jeder Spalte einzeln, anstatt sie zum Sortieren zu einem einzigen Zeitstempel zusammenzufassen.
Um dieses Problem zu beheben, können Sie Folgendes verwenden modifizierte Abfrage:
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 modifizierten Abfrage vereinfachen wir die ORDER BY-Klausel, indem wir einen einzelnen CASE-Ausdruck verwenden, um die Sortierreihenfolge zu bestimmen. Dadurch können wir die Zeilen basierend auf einem kombinierten Zeitstempel sortieren, der je nach Wert von id_one und id_two dynamisch die entsprechende Spalte (timestamp_one oder timestamp_two) auswählt.
Das obige ist der detaillierte Inhalt vonWie sortiere ich Zeilen basierend auf einem bedingten Zeitstempel in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!