Heim >Datenbank >MySQL-Tutorial >Wie ordne ich MySQL-Zeilen basierend auf mehreren Zeitstempelspalten mit bedingter Sortierung?

Wie ordne ich MySQL-Zeilen basierend auf mehreren Zeitstempelspalten mit bedingter Sortierung?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 02:37:03974Durchsuche

How to Order MySQL Rows Based on Multiple Timestamp Columns with Conditional Sorting?

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!

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