heutiges datum bis zum nächsten (kleinsten)

mille

Erfahrenes Mitglied
Also ich bin gerade an einem veranstaltungsskript :)

Problem: Ich möchte aus einer db die veranstaltung haben die als nächstes in der zukunft liegt, sprich die mit dem "kleinsten" datum

Speicherformat: tt.mm.jjjj (werd ich auch nicht ändern, alle andern skripte sind in diesem format)

ich will nun einfach aus der db das nächste datum haben, welches am nächsten in der zukunft liegt, aber wie mach ich das, bzw mit welchen operatoren arbeite ich in der anweisung bei mysql, gut, hätte ich auch bei sql posten koennen, aber sql hängt ja nun eng mit phpzusammen, wenn man von textdatein abgeneigt ist ;)...

aber vielleicht ist das so auch garnicht moeglich und ich muss erstma alles auslesen bis ich das kleinste datum habe, dann extra werte setzen und anhand der ID das dann auslesen, aber das ist ziemlcih kompliziert, geht das denn einfacher? mit < und > operatoren? bzw >= oder <=

wäre für vorschläge dankbar :)
 
mit LIMIT 0,1.
Das gibt dir dann nur einen Datensatz aus.
LIMIT a, b
a = Von Datensatz (beginnend mit 0)
b = wie viele Datensätze

HAVE FUN!
 
mh, soweit war ich leider schon

ich sollte allerdigns erstma vergleichen ob das datum, was ich dann ausgelesen habe, nicht vielleicht ein datum ist das noch später folgt.
Einfaches beispiel
tabelle:
datum | event
01.02.2003 - volksmusik
30.01.2003 - rock musik
04.06.2003 - techno

ich will mit einer mysql rausfinden welches davon das datum ist welches am ehesten in der zukunft liegt, wenn man jetzt mal davon aus geht das heute der 1.1.2003 ist, wäre die rockmusik zum auswählen da, wie mach ich das aber mit dem auslesen ... HILFEEEEEE
 
Ich sage es jetzt zum ca 5ten Mal innerhalb von zwei Wochen. Nehmt doch bitte nicht die MySQL Date Spalte sondern eine INT Spalte und speichert einen UNIX-Timestamp da drin, das ist eine Sekundenanzahl die kann man wunderbar subtrahieren und das kleinste Ergebnis dann nehmen.

time(),mktime() und date() sind deine Freunde.
 
[mein erstes Post - Bitte um Nachsicht]

Du hättest aber auch eine TIMESTAMP Spalte machen können, der Vorteil dabei ist, du kannst darin suchen, sortieren und bekommst das Datum dank date_format auch schnell auber heraus.

Wäre es im Format von JJJJMMDDhhmmii

könntest du mit:
SELECT date_format(datum,'%d.%m.%Y') AS next_datum FROM t_db_case WHERE datum > 'JJJJMMDDhhmmss' ORDER BY case_ende ASC LIMIT 1;

als Ergebnis bekommen
$row['next_datum'] = DD.MM.JJJJ

Das "was wäre wenn" wird dir aber nicht helfen. Du könntest es aber bei der Abfrage per regex probieren, was jedoch extrem lahm ist. Oder du machst "den Klassiker" und schiebst alles in ein array, zerlegst es aber schon bei der Abfrage in Tag, Monat, Jahr und durchsuchst dann den Brocken.

[mein erstes Post - Bitte um Nachsicht]
 
Original geschrieben von rauchi
[mein erstes Post - Bitte um Nachsicht]

Du hättest aber auch eine TIMESTAMP Spalte machen können, der Vorteil dabei ist, du kannst darin suchen, sortieren und bekommst das Datum dank date_format auch schnell auber heraus.

Wäre es im Format von JJJJMMDDhhmmii


ich hab gestern mal diesen "timestamp" angeguckt, ich finde, dass es nichts aderes ist als ein zusammengeklatschtes datum, vorteile bringts net wirklich. ob ich nun die spalte gleich auf int setze und nen unix-zeitstempel in sekunden eintrage oder diesen zusammengeklatschen 08/15-Zeitstempel, am ende kommt das selbe raus! rein speichertechnisch ist ein unix-zeitstempel und mysql-Zeitstempel identisch, beide haben 4 Bytes, auch wenn ich den MySQL-Zeitstempel nur mit 6 oder 8 Stellen (YYYYMMDD bzw. YYMMDD) speichere, es gehen jedesmal 4 bytes drauf

ich kann also net wirklich verstehen, warum man überhaupt die DATE-Typen von MySQL nimmt. ich schließe mich also leuchte in der hinsicht an!
 
Hm, also ich weiß ja nicht ob das Problem schon gelöst ist, und bringe daher noch mal meinen Lösungvorschlag mit ein.

1. Egal ob TIMESTAMP oder DATE-TIME, die SQL ABfrage um nur den nächsten Termin herauszubekommen ist mehr als simpel

PHP:
SELECT * FROM tabelle WHERE date >= "2003-08-14 10-32" LIMIT 1
oder halt
$time = mktime(2003,08,14,10,32,00);
SELECT * FROM tabelle WHERE timestamp >= '".$time."' LIMIT 1

2. Ich persönlich nutze zwar auch lieber einen Timestamp, da mit diesem durchaus mehr Berechnungen möglich sind und er sich generell schneller berechnen lässt, aber auch DATE-TIME hat seine Vorteile!

3. Wenn noch Fragen oder Anregungen, einfach posten ;)
 
@Sebastianus

die vorteile von Datetime würd ich mal gerne Wissen!?
nenn mir mal wennigstens einen Vor/Nachteil.
 
Zurück