heutiges datum bis zum nächsten (kleinsten)

Original geschrieben von Sebastianus
Einzig mir bekannter Vorteil von Date-Time ist es, dass man das Datum auch ohne Umwandlung des Strings erkennen kann ;).

nen richtiger coder-freak erkennt auch im unix-zeitstempel dir urzeit :p, nur für die besucher ist es gewöhnungsbedürftig :-)

also doch kein vorteil ;)
 
mh, ich weiss nich ganz was ihr meint, das klingt für mich jetzt so als wollt ihr das aktuelle datum in der INT SPALTE (???) als timestamp speichern.

vielleicht versteh ichs ja falsch, wäre dankbar wenns mir einer erklärt

was ich mache ist ja im intern bereich ein datum eingeben + ein text (z.b. heute abend ist westbam im park, oder sowas dummes)... dazu gebe ich das datum tt.mm.jjjj ein (jeweils als strings, zusammengesetzt - also kann ichs auc anders zusammensetzen, nach dem vormat jjjmmtthhmmii, so wie man es beschrieben hat, aber trotzdme komm ich damit nicht ganz klar, wäre doch dankbar :)

mfg
 
@pornex: Was die Damen und Herren oberhalb deines letzten Posts geschrieben haben, hilft dir bei deinem Prob natürlich nicht weiter. Da gings nur darum was besser ist, TIMESTAMP oder INT oder vielleicht ja auch TINYTEXT.

BTW: TIMESTAMP ist performanter, und per mySQL das Datum zu formatieren, ist schneller als mit PHP.

Entweder du änderst das Format in dem du das Datum speicherst in TIMESTAMP, (beim Abfragen kannst du es immer noch schnell formatieren) denn dann kannst du auch dein gewünschtes Suchergebnis per mySQL-Abfrage erhalten.
Oder du speicherst alle möglichen Datensätze in ein array, wo du Jahr, Monat und Tag getrennt hast und durchsuchst es dann, was natürlich super hässlich ist ;-)

@Sebastianus:
pornex hat das Datum aber nicht als 2003-08-14 10-32 sondern als TT.MM.JJJJ abgespeichert, also wird die Abfrage nicht das Gewünschte ergeben - dies als Anregung :-)
 
Zuletzt bearbeitet:
ja, is ja gut, ich hab kapiert, ich nehm timestamp, hau ich das ebend noch dazu

aber ich hätte das gern mal als wörtliche erklärung was ich zu tun hab, vielleicht so mit befehlen, zusammenschreiben kriech dann noch hin, ich will allerdings verstehn was ich dann tuhe, deshalb die worterklärung - denn learning by doing is meine devise (ich lern immer das was ich brauche :))

~danke
 
Ich hab dir was zusammengestellt, damit du dein jetziges Datums-format nicht ändern musst.

Kosten dafür sind: statt einer Abfrage sind es nun drei Abfragen

Der Weg den ich gegangen bin ist folgender:
Statt das ganze in ein array auszugeben, damit du das "falsche" Datumsformat tt.mm.jjjj durchsuchen kannst, erzeugen wir einfach eine temporären Tabelle. Die ist schneller anzusprechen als ein array.

Felder der temporären Tabelle mit dem Namen t_richtig sind:
der prim-key id_richtig: der wird kopiert von deiner Tabelle mit den Terminen. Da ich nicht weiß wie diese Tabelle und der prim-key heißt, hab ich die Tabelle t_datum und id_datum, datum, info genannt, dass musst du halt noch ausbessern ;-)
und dem TIMESTAMP datum: hierher kopieren wir dein Datum im richtigen Format

Die Temporäre Tabelle kannst du dann nach Lust und Laune durchsuchen.

und zur Vollständigkeit haben wir dann auch noch die Möglichkeit die Temporäre Tabelle zu löschen.


Soda, los gehts!

mit diesem sql-Befehl erzeugst du die temp. Tabelle

//************************************************************************
// db temporary tabelle (t_richtig) erzeugen
//************************************************************************
//CREATE TEMPORARY TABLE t_richtig (id_richtig INT NOT NULL AUTO_INCREMENT PRIMARY KEY, datum TIMESTAMP(8) NOT NULL);



Jetzt werden wir einfach die id und das datum von t_datum nach t_richtig spiegeln, wobei wir aber das Datums-Format ändern.
right, mid, und left zerlegen dir dein tt.mm.jjjj in jjjj und mm und tt
concat verbindet dann die drei Teile zu jjjjmmtt Timestamp(8) halt ;-)

//************************************************************************
// db t_datum spiegeln mit richtigem Datumsformat in temporary tabelle (t_richtig)
//************************************************************************
//INSERT INTO t_richtig (id_richtig, datum) SELECT id_datum, concat(right(datum,4),mid(datum,4,2),left(datum,2)) FROM t_datum;




die Temporäre Tabelle mit all den Daten ist erzeugt, jetzt können wir mal loslegen mit der Abfrage.

Wir suchen das Datum und die Info zum nächsten Event, der nach einem bestimmten Tag ($best_date) statt findet.
$best_date muss im Format jjjjmmtt sein.

Die Abfrage wird vielleicht nicht genau dem entsprechen, was du brauchst, aber mit wenig Info kann man halt nur allg. antworten :-)

//************************************************************************
// db in temporary tabelle (t_richtig) suchen, welche ID die nächste ist nach dem bestimmten Datum ($best_date)
// mit einem INNER JOIN mit t_datum wo (ON) die IDs gleich sind
//************************************************************************
//SELECT d.info, date_format(r.datum,'%d.%m.%Y') AS datum FROM t_datum AS d INNER JOIN t_richtig AS r ON r.id_richtig = d.id_datum WHERE r.datum > '".$best_date."' LIMIT 1;


Ergebnis ist z.b:
Code:
+----------------------------+----------------+
| info                       | datum          |
+----------------------------+----------------+
| dies ist die info zu...    | 18.08.2003     |
+----------------------------+----------------+

So kannst du die temp. Tabelle wieder löschen :eek:

//************************************************************************
// db temporary tabelle (t_richtig) löschen
//************************************************************************
//DROP TABLE t_richtig;



Hättest du beim Datenbankdesign schon von Anfang an das richtige Format benutzt, wäre es einfacher gewesen. Aber so kannst du mal ausprobieren, wie man eine Temporäre Tabelle erzeugt, wie man eine Feldinhalt zerlegt und anders zusammenfügt und wie man eine ganze Tabelle spiegelt.;) :-)

So, ich hoffe, geholfen zu haben.
 
Zuletzt bearbeitet:
find ich ja nett das du mir das so beschreibst, ich werd nachha probiern, aber bevor ich das probiere (Deshalb nachher ;) ) würd ich meinen das ich die temporäre tabelle nicht erstellen muss, sondern einfach an die alte tabelle noch eine Spalte ranhänge, diese datum_richtig nenne und das datum einmal im "falschen" format und einmal im "richtigen" format speichere... dann bräucht ich doch bloß noch die abfrage, so ziemlich, oder ist das nicht moeglcih wie ich mir das gerade denke?

weil dann hab ich ja den timestamp :) ... wenn das nicht geht fummle ich deine variation zusammen rauchi :)...

brauch nur noch dein kommentar dazu :)... oder halt jemand der das einschätzen kann *hehe*

~basti, dankeee
 
Na klar, dass kannst du natürlich auch machen. dann musst du aber immer, wenn du ein Ereignis eintragst, auch das Datum 2 mal schreiben. Da ich nicht weiß wie groß deine Seite ist und wie oft du an unterschiedlichsten Stellen einträge machst, hab ich die Lösung mit der temp. Tabelle gebracht.

Wenn du aber nur an einer stelle Termine eingibst, ist es natürlich am schnellsten, wenn du dort das Datum auch noch im TIMESTAMP-Format einträgst(so wie von dir gemeint).

Wenn du nur den Tag ohne Uhrzeit eingeben möchtest nimm timestamp(8) ist kürzer und daher perfomanter

zum suchen nach dem nächsten Termin brauchst du dann nur:

$heute = date ("Ymd");

SELECT * FROM t_datum WHERE timestamp_feld > '".$heute."' LIMIT 1;

gibt den nächsten Termin aus (morgen, falls gesetzt)

Was ich zu bedenken gebe ist, dass bei der obrigen Abfrage pro Tag nur ein Termin gesetzt sein sollte. - aber wie gesagt, wenn du nicht mehr verratest von deiner DB, dann wird die Antwort auch nicht so genau ausfallen ;)
 
Zuletzt bearbeitet:
das is natürlich einfach und das datum 2 mal zu schreiben macht nichts, das is bloß ein kleines fenster in dem die nächste veranstaltung drinne steht...wenn die ist bzw das sie ist, beim heutigen datum also sollte ich vielleicht noch ">=" nehmen ;)

wird aber klappen und ich werd mir angewöhnen mit timestamp zu arbeiten :)

dankeschön
 
Zurück