Query und Datumsfunktion
UndSo
- datenbank
Hallo, ich habe mir zwar die Doku zu SQL angeschaut, aber dennoch nicht hingekriegt.
Wie schaffe ich es, eine Query aufzubauen, die mir die Ergebnisse vom heutigen Tag halt, plus die vom nächsten und übernächsten Tag?
select spalte1, spalte2, spalte3 from pre_tabelle where datum=(curdate()+1);
Das wäre die erste Frage.
Die Zweite: Ich kann mit einer Query auslesen, welche Freunde von mir heute Geburtstag haben. Eine zweite Query könnte ich für Freunde nehmen, bei denen noch ein Tag bis zum Geburtstag fehlt. Eine noch für zwei Tage.
Dies wären 3 Querys.
select freundid, feundname from pre_tabellefreunde where datum=(curdate()-1);
Damit würde ich aber 3 Querys verbraten. Hab jetzt auf Anhieb auch keine Lösung, wie ich das mit einem Query geschickt machen könnte? Jemand ein Tipp? Programmiersprache Java.
Grüßchen
Hi
Die Zweite: Ich kann mit einer Query auslesen, welche Freunde von mir heute Geburtstag haben. Eine zweite Query könnte ich für Freunde nehmen, bei denen noch ein Tag bis zum Geburtstag fehlt. Eine noch für zwei Tage.
Dies wären 3 Querys.
select freundid, feundname from pre_tabellefreunde where datum=(curdate()-1);
Damit würde ich aber 3 Querys verbraten. Hab jetzt auf Anhieb auch keine Lösung, wie ich das mit einem Query geschickt machen könnte? Jemand ein Tipp? Programmiersprache Java.
Programmiersprache ist hier ja nicht relevant (ich kann kein Java)...
http://dev.mysql.com/doc/refman/5.1/de/comparison-operators.html
expr BETWEEN min AND max
Wenn expr größer oder gleich min und expr kleiner oder gleich max ist, gibt BETWEEN 1 zurück, andernfalls 0.
Mit anderen Worten (und ich habe keine Ahnung von Datumsfunktionen):
select freundid, feundname from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
Der Operator sollte auch bei deinem ersten Problem von Nutzen sein.
hi,
oh danke dir, werde ich gleich mal testen, ich hatte dummerweise immer WHERE drin und habe nach dem WHERE alles möglich probiert ;)
Bin auf das BETWEEN nicht gekommen.
Grüße
Hallo,
alsod ie Query funktioniert optimal.
Bei meinem Problem mit der Geburtstagerinnerung der Freunde.
Mit where datum BETWEEN (curdate()-3) AND (curdate()); habe ich alle Freunde, bei enen 3, 2 und 1 Tag bis zum Geburtstag fehlen. Und den Geburtstag natürlich.
Alle in einem Array. In Java wird es jetzt irgendwie aufwendig, zu prüfen, bei welchem Freund ein 1 Tag bis zum Geburtstag fehlt, bei welchen 2 Tage usw.
Könnte man nun in die Qury gleich einbauen, dass er die Differenz gleich mit überträgt?
Irgend etwas so in der Art:
select freundid, feundname, DATEDIFF(datum,curdate()) from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
Alle in einem Array. In Java wird es jetzt irgendwie aufwendig, zu prüfen, bei welchem Freund ein 1 Tag bis zum Geburtstag fehlt, bei welchen 2 Tage usw.
Wie gesagt, ich kann kein Java, weiß also auch nicht, ob es und welche Array-sortier-Funktionen oder Prozeduren es da gibt... (Bubble geht aber sicher in jeder Sprache).
select freundid, feundname from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate()) ORDER BY datum;
select freundid, feundname from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate()) ORDER BY datum DESC;
Je nachdem wie herum du es sortiert haben möchtest.
Nachtrag: Ach ja, das Datum selber solltest du dann vieleicht doch mit abfragen... ob als Differenz oder als absoluter Wert ist dann wahrscheinlich egal, wie es sich halt leichter weiter verarbeiten lässt.
Hallo,
danke, hab auch versucht die Differenz zu holen, klappt irgendwie nicht. Ist mein Ansatz falsch???
select freundid, feundname, DATEDIFF(freundgeburtsdatum,curdate()) from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
Grüße
select freundid, feundname, DATEDIFF(freundgeburtsdatum,curdate()) from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
Äääh heißt die Spalte jetzt "freundgeburtsdatum" oder "datum"?
Falls das trotz Korrektur nicht geht... ruf das Datum regulär ab, also ohne Differenz und errechne die Differenz in deinem Java-Programm.
hallo,
hab gedacht, dass man da ein neues thema öffnen kann, da es ja ein bissl um was anderes geht.
ups, freundgeburtsdatum sollte natürlich datum heißen.
blöd, dass es dann nicht im query geht, wäre eine super lösung geworden und würde mir in java viel arbeit ersparen.
Ich merke, die Doku ist für SQL 5.1, wir haben 4.1
Grüße
*traurig ist*
Hallöchen,
jetzt bin ich es nochmal.
Das Datediff ist auch in der Doku von 4.1 enthalten, also müsste es gehen.
Habe zu Testzwecken mal nur das eingegeben:
select DATEDIFF('2006-08-01', CURDATE());
Er bbringt keinen Fehler.
Sobald ich das in die obere Query einbaue, erzeugt er einen Fehler.
Weiß jemand, ob ich die Query noch umschreiben muss oder ob ich da einen Fehler habe?
select freundid, feundname, DATEDIFF('2006-08-01', CURDATE()) from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
select freundid, feundname, DATEDIFF(geburtsdatum, CURDATE()) from pre_tabellefreunde where datum BETWEEN (curdate()-3) AND (curdate());
echo $begrüßung;
Sobald ich das in die obere Query einbaue, erzeugt er einen Fehler.
Sei doch bitte nicht so unspezifisch bei der Benennung des Fehlers, schließlich kennt MySQL über 500 verschiede Fehlermeldungen. Dazu kommen noch variable Anteile in der Meldung, die die Meldung meist noch präzisieren.
echo "$verabschiedung $name";
Nochmals ich.
Bin die ganze Zeit am herumtesten. Am Ende hat es doch geklappt.
Es lag die ganze daran, dass ich in der Query hinten kein LIMIT angegeben habe. Sobald ich das einfüge, funktioniert alles.
Einen Denkfehler habe ich in der Query noch.
Habe das hier probiert, da ich vom Geburtsdatum, zum Beispiel 1984-03-03 ja das neue Jahr brauche, dass da eine Differenz von 1 oder 2 Tagen rauskommt und nicht eine rießen Zahl.
DATEDIFF(((date_format(curdate(),'%Y')-date_format(geburtsdatum,'%m-%d')), CURDATE())
So ein Zusammenfügen geht nicht ne.
Grüße