SQL order Frage

Hi an alle :slight_smile:

Ich habe eine Datenbank, welche unter anderem drei Spalten beinhaltet: von, bis in welchen Anfangszeit und Endzeit eines Events stehen
(Beispiel: von = 18:00, bis = 20:00)

Ich habe nun eine sql abfrage mit dem befehl „order by datum asc, von asc“, was auch funktioniert. Nach Datum sortiert, steht 18:00 vor 20:00 und so weiter. Wenn ich aber nun eine Anfangszeit von 00:00 habe, dann steht das ganz oben, klar da ja 0 kleiner ist als 1. Ich möchte aber, dass 00:00 auch unterhalt von 20:00 oder ähnliches steht.

Wie kann ich das realisieren, bin für jeden Tip dankbar

MfG BigSanch

Also nur mal zum Verständnis.
Du hast betsimmte Events die eine Start und Endzeit haben.
Angenommen deine Start und Endzeit stehen in einzelnen Felndern.
Wieso lässt du das Ganze dann nicht nach der Startzeit sortieren?
Denn wenn es 0 uhr ist und das gleiche Datum, dann ist ja klar, dass es früher ist. Wenn das Datum jedoch einen tag weiter ist müste es auch unter den anderen angezeigt werden :slight_smile:
Wäre es also nicht sinnvoll das ganze nur nach den Anfangszeiten zu sortieren?

Dann würde ich 24 Stunden dazuzählen

if ($datum==„00:00“) {$datum=„24:00“}

Weiss aber nicht, ob das funktioniert, weil 24:00 gibts glaube ich gar nicht

Danke für die Antworten :slight_smile:

@[B]Tomm[/B]
Danke, das ist denk ich etwas doof, wenn dann 24:00 da stehen würde, ginge aber auch, dass wenn man bei der ausgabe dies wieder umwandeln lässt. Danke für den Anstoß

@[B]Gilles[/B]
Danke, das war nur ein Schreibfehler, dass es nach datum sortiert, es sollte schon die Startzeit sein, ist es auch bei mir. aber danke für den Gedankenanstoss, hätt ich auch drauf kommen können, mit dem Datum, einfach wenn 00:00 uhr ist einfach das Datum auf einen Tag danach zu legen, so werd ichs machen, danke :slight_smile:

MfG BigSanch

Es würde sich anbieten, zwei Spalten vom Typ DATETIME für Start- bzw. Endzeitpunkt anzulegen. Alles andere ist irgendwie seltsam und mit Sicherheit unpraktisch.

Genau das meinte ich mit meinem Post von vorher. Leider ist bei mir nie der Begriff DATETIME gefallen :smiley:

Und ich würde kein DATETIME für das Ende benutzen, sondern eine Zeitdauer Dauer (z.b. Stunden), damit wird das Datenbankdesign wesentlich flexibler. Du solltest dir mal anschauen wieviel mysql Funktionen für Datetime Felder es gibt.

Ich dachte, zweimal DATETIME wäre flexibler, weil sich dann ohne weitere Berechnungen auch alle Einträge ausgeben lassen, die an einem Tag enden o. ä. Ein kompletter DATETIME-Wert ist in sich geschlossener als die Angabe eines Intervalls.

Man könnte ohne großartiges Nachdenken sowas machen:

mysql> SELECT TIMEDIFF('2010-03-20 03:30:00', '2010-03-19 17:45:00'); +--------------------------------------------------------+ | TIMEDIFF('2010-03-20 03:30:00', '2010-03-19 17:45:00') | +--------------------------------------------------------+ | 09:45:00 | +--------------------------------------------------------+ 1 row in set (0.00 sec)

(Veranstaltung geht von 17.45 Uhr am 19. März bis um 3.30 Uhr am 20. März.)

MySQL :: MySQL 5.1 Reference Manual :: 11.6 Date and Time Functions

Zusätzlich zu dem Timediff kann man sich auch schön zeiträume ausgeben lassen mit Between.

mysql> SELECT `startdate`,`enddate` FROM `dates` WHERE `startdate` BETWEEN '2010-03-19 08:25:00' AND '2010-03-19 20:00:00';