MySql - Order by Datum und dann nach Uhrzeit
Ich habe eine Tabelle mit 2 'datetime' Felder: 'eventDate' und 'eventHour'. Ich bin versuchen, um durch 'eventDate' und dann durch 'eventHour'.
Für jedes Datum habe ich eine Liste mit Betriebssystem-Ereignisse, so dass ist, warum ich will, um nach Datum und dann nach Uhrzeit.
Dank!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob es irgendeinen verborgenen Sinn in Ihrer Frage, aber die standard-Weg, dies zu tun, scheint zu passen:
Gibt Sie Stunden in Termine, wie:
Wenn Sie tatsächlich haben diese beiden Felder als real
datetime
Felder-schema nach oben geschraubt. Sollten Sie einedate
Feld für das Datum und einentime
oder integral-field-für die Stunde.Du könnte kombinieren Sie beide in einem einzigen
datetime
Feld, aber Sie sollten Gleichgewicht, die gegen die Ineffizienz zu tun, pro-Zeile-Funktionen in Ihremselect
Anweisungen, wenn Sie wollen, um Sie zu trennen. Es ist in der Regel besser, um Felder zu trennen, wenn Sie gehen, um zu verwenden, diese deutlich.Wenn Sie tun verwenden pro-Zeile Funktionen, die Sie verwenden können:
extrahieren der
date
undtime
Komponenten einerdatetime
.Wenn Sie wollen, Liste, Daten als neueste eventdate ersten, wenn Datensätze von demselben Datum vorhanden ist, dann
Daten werden zeitlich sortiert ie neueste Zeit, Erster,,
Können Sie versuchen, wie unten
Warum nicht speichern Sie beide
eventDate
undeventHour
in das gleiche Feld, wenn Sie beideDateTime
?Zu bekommen, was Sie wollen mit der aktuellen Regelung können Sie dies tun:
Tut
nicht funktionieren?
Können Sie bestellen, indem Sie so viele wie Sie benötigen, verwenden Sie einfach eine Liste. Es wird, um durch den ersten Wert, dann den zweiten...usw.
Wenn Sie zwei datetime-Felder dann können Sie erhalten nur den Tag oder nur die Stunde mit etwas wie:
Bestellen Sie es, indem Sie die id in absteigender Reihenfolge.
<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>
Sollte diese Arbeit
Erstens, es ist eine schlechte Praxis, um zu sparen Sie Zeit und Datum in verschiedenen Felder.
Sowieso, vorausgesetzt, Sie sind speichern von Datum/Uhrzeit im richtigen format sind.
(ich.e: Datum im format JJJJ-mm-TT und die Uhrzeit ist hh:ss)
Müssen Sie zuerst verketten von Datum und Zeit, um ein datetime-Wert.
Technisch gesehen können Sie eine BESTELLUNG, INDEM Sie AUF einem Datetime-Feld, aber es ist keine gute Praxis wieder.
In unserem Fall, wenn wir ein CONCAT, so ist dieses in einen string umgewandelt, so dass die Ergebnismenge wird falsch sein.
So müssen Sie konvertieren Sie es in einen UNIX-TIMESTAMP zu tun, eine Bestellung.
Die gute Praxis, führen einen UNIX_TIMESTAMP auf einem datetime-Feld, bevor Sie eine ORDER by-Klausel.
Können Sie die folgende Abfrage verwenden.
WÄHLEN Sie column1,column2, UNIX_TIMESTAMP(CONCAT(
event_date
,' ',event_time
)) als unixtimestampfrom table_name
Um von unixtimestamp desc;
Hinweis:(Es ist ein Leerzeichen zwischen event_date und event_time in der CONCAT-Funktion. Es zeigt nicht richtig hier.)
Dies ist der beste Weg, arbeitete für mich, nur konvertieren von Datum bis Anzahl Tage sind, mit der Funktion to_days(Datum) und von Zeit zu Zeit von Sekunden, mit der Funktion TIME_TO_SEC(Zeit)
Beispiel:
Esta es la mejor forma que funcionó para mí, sólo convertir la fecha al número de días con la función TO_DAYS (fecha) y el tiempo a la cantidad de segundos con la funcion TIME_TO_SEC (tiempo)
warum nicht mit einem TIMESTAMP zur Verknüpfung der beiden Felder?
Zuerst müssen wir wandeln auf dem eventDate-Feld zu DATUM, für diese verwenden wir die Funktion DATE ():
Danach konvertieren Sie die eventHour zu ZEIT, so etwas wie dieses:
Der nächste Schritt ist die Verknüpfung dieser beiden Funktionen in eine TIMESTAMP-Funktion:
Ja, aber Sie brauchen nicht eine WÄHLEN, aber eine BESTELLUNG DURCH, so dass ein vollständiges Beispiel so Aussehen:
Ich hoffe das kann dir helfen.