Heim >Datenbank >MySQL-Tutorial >Wie ordne ich Zeilen basierend auf mehreren Zeitstempelspalten in MySQL mit der CASE-Anweisung an?

Wie ordne ich Zeilen basierend auf mehreren Zeitstempelspalten in MySQL mit der CASE-Anweisung an?

Susan Sarandon
Susan SarandonOriginal
2024-11-15 09:59:02664Durchsuche

How to Order Rows Based on Multiple Timestamp Columns in MySQL with CASE Statement?

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:


| id_one | id_two | timestamp_one | timestamp_two |

| 27 | 35 | 9:30 | NULL |

| 35 | 27 | NULL | 9:33 |

| 27 | 35 | 9:34 | NULL |

| 35 | 27 | NULL | 9:35 |

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!

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