MySql - Sortieren nach Datum und dann nach Uhrzeit

7

Ich habe eine Tabelle mit 2 'datetime' Feldern: 'eventDate' und 'eventHour'. Ich versuche, nach "eventDate" und dann nach "eventHour" zu bestellen.

Für jedes Datum werde ich eine Liste von Ereignissen haben, deshalb werde ich nach Datum und dann nach Zeit sortieren.

Danke !!

    
AndreMiranda 26.07.2010, 01:05
quelle

8 Antworten

20

Ich bin mir nicht sicher, ob es irgendeine versteckte Bedeutung in Ihrer Frage gibt, aber die übliche Art, dies zu tun, scheint zu passen:

%Vor%

Das gibt Ihnen Stunden innerhalb von Daten wie:

%Vor%

Wenn Sie diese beiden Felder tatsächlich als real datetime Felder haben, ist Ihr Schema vermasselt. Sie sollten ein date -Feld für das Datum und ein time oder ein integrales Feld für die Stunde haben.

Sie könnten beide zu einem einzigen datetime -Feld zusammenfassen, aber Sie sollten dies gegen die Ineffizienzen der Ausführung von Funktionen pro Zeile in Ihren select -Anweisungen abwägen, wenn Sie sie trennen möchten. Es ist normalerweise besser, Felder getrennt zu halten, wenn Sie sie deutlich verwenden.

Wenn Sie tun müssen Zeilenfunktionen verwenden, können Sie verwenden:

%Vor%

, um nur die Komponenten date und time eines datetime zu extrahieren.

    
paxdiablo 26.07.2010, 01:12
quelle
9

Wenn Sie die Daten zuerst als letztes Ereignisdatum auflisten möchten, wenn Datensätze desselben Datums vorhanden sind Daten werden nach Zeit sortiert, dh die späteste Zeit zuerst,

Sie können es wie folgt versuchen

%Vor%     
Romancha KC 03.06.2013 07:04
quelle
3

Macht

%Vor%

funktioniert nicht?

    
Ned Batchelder 26.07.2010 01:13
quelle
2

Warum speichern Sie nicht sowohl eventDate als auch eventHour im selben Feld, wenn beide DateTime sind?

Um zu bekommen, was Sie mit dem aktuellen Schema wollen, können Sie dies tun:

%Vor%     
Matt Mitchell 26.07.2010 01:12
quelle
1

Sie können beliebig viele Bestellungen aufgeben, verwenden Sie einfach eine Liste. Es wird nach dem ersten Wert sortiert, dann nach dem zweiten ... usw.

%Vor%

Wenn Sie zwei Datetime-Felder haben, können Sie nur das Datum oder nur die Stunde mit etwas wie:

abrufen %Vor%     
northpole 26.07.2010 01:12
quelle
0

Erstens ist es eine schlechte Übung, Datum und Uhrzeit in verschiedenen Feldern zu speichern.

Jedenfalls vorausgesetzt, Sie speichern Datum / Uhrzeit im richtigen Format. (d. h. das Datumsformat ist JJJJ-MM-TT und die Zeit ist HH: SS)

Sie müssen zuerst das Datum und die Uhrzeit verketten, um einen Datetime-Wert zu erhalten. Technisch gesehen können Sie ORDER BY ON auf einem Datetime-Feld ausführen, aber es ist nicht wieder eine gute Übung. In unserem Fall, wenn wir CONCAT ausführen, wird dies in eine Zeichenfolge konvertiert, so dass die Ergebnismenge falsch ist. Sie müssen es also in einen UNIX TIMESTAMP konvertieren, um eine Bestellung durchzuführen.

Es empfiehlt sich, ein UNIX_TIMESTAMP für ein Datetime-Feld vor einer ORDER by-Klausel auszuführen.

Sie können die folgende Abfrage verwenden.

SELECT spalte1, spalte2, UNIX_TIMESTAMP (CONCAT ( event_date , '', event_time )) als unixtimestamp aus Tabellenname Bestellung von unixtimestamp desc;

Hinweis: (In der CONCAT-Funktion gibt es ein Leerzeichen zwischen event_date und event_time. Es wird hier nicht korrekt angezeigt.)

    
irshad 23.02.2012 20:53
quelle
0

Ordne es mit der ID in absteigender Reihenfolge an.

<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>

Dies sollte funktionieren

    
JMD 23.03.2014 14:33
quelle
0

Dies ist der beste Weg, der für mich funktioniert hat, einfach das Datum in Tage mit der Funktion bis (Datum) und die Zeit in die Anzahl der Sekunden mit der Funktion TIME_TO_SEC (Zeit) umwandeln , Beispiel:

%Vor%

Esta es la mejor forma que funcionó para mí, sólo convertir la fecha al numero de días con la función TO_DAYS (fecha) y el tiempo a la cantadid de segundos con la funcion TIME_TO_SEC (tiempo)

%Vor%     
David ddc 24.09.2015 11:00
quelle

Tags und Links