MySQL-Select Problem
Pascal Müller
- datenbank
0 Daniel1 Daniel-1 Sebastian0 Pascal Müller0 Struppi
Hallo allerseits!
vielleicht kann mir ja jemand bei folgendem Problem helfen:
ich hab diese Variable: $letzterdonnerstag (gibt "2005-09-01" aus)
Danach möchte ich _einen_ Datensatz aufrufen, dessen Datum grösser oder gleich "$letzterdonnerstag" ist. Das MySQL-Feld "datum" ist zb. 2005-09-07
$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";
nur: das ganze gibt mir nie diesen neueren Datensatz aus.
Vielen Dank für Eure Mithilfe.
Ahoi Pascal Müller,
nur: das ganze gibt mir nie diesen neueren Datensatz aus.
ich versteh dein problem nicht ganz, aber ein ORDER BY datum (desc) könnte helfen.
MfG
Hi
Ich verstehe dein Problem, hatte genau das selbe!
Der Haken liegt an der Sprachformatierung! Da gibt es große Unterschiede wie PHP und MYSQL das Datum formatieren.
Ich habe es so gelöst, dass ich mir das Datum aus der MYSQL DB herausgeholt habe und es dann mittels PHP mit der $variable verglichen habe.
Lass dir mal beide Daten ausgeben, sieh dir an wie sie formatiert sind und dann versuch sie auf selben Nenner zu bringen.
Hab ca. 2 Tage zugebracht aber keine effizientere Lösung gefunden.
lg Greedy Raccoon
Hi
das Datum wird jeweils YYYY-MM-DD (Norm) ausgegeben.
Darauf hab ich schon geschaut...
Pascal
Ahoi Greedy_Raccoon,
Der Haken liegt an der Sprachformatierung! Da gibt es große Unterschiede wie PHP und MYSQL das Datum formatieren.
PHP formatiert das datum so wie du es willst.
MfG
Ahoi Pascal Müller,
$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";
^^hier fehlen die ''
MfG
Hallo Daniel,
^^hier fehlen die ''
Wenn du 'Anführungszeichen' setzt, kann man es erst recht nicht mit Hilfe von >= vergleichen.
Dann wäre es wie ein Vergleich von 'Äpfel'>='Birnen'.
Und das funktioniert imho nicht.
Gruß,
Sebastian
echo $begrüßung;
Wenn du 'Anführungszeichen' setzt, kann man es erst recht nicht mit Hilfe von >= vergleichen.
Wenn du ein Datumswert als 2005-09-01 ohne Anführungszeichen an MySQL übergibst, dann sieht da MySQL nur Zahlen und zwei Minuszeichen. Es rechnet dir dann diesen Ausdruck aus: 2005 minus 9 minus 1. Das wirst du sicher nicht wollen. In Anführungszeichen einschließen ist schon richtig.
echo "$verabschiedung $name";
Ahoi Sebastian,
Dann wäre es wie ein Vergleich von 'Äpfel'>='Birnen'.
Und das funktioniert imho nicht.
korekt, schließlich ist da ein Ä das könnte probleme geben,
'Aepfel'>='Birnen' gibt fals da B>A bei der sortierung eines Datums
ist bei MySQL aufgrund des Formates ziemlich einfach
2005 = 2005
- = -
09 = 09
- = -
07 > 01
=> 2005-09-07 > 2005-09-01
Alles klar? deshalb gibts es ja die probleme wenn man z.B. Daten im deutschen format vergleicht
MfG
Hallo Pascal,
das sicherste ist, wenn du sowohl das DB-Feld datum als auch die Variable $letzterdonnerstag als Unix-Time anlegst. Dann ist es ein einfacher Zahlenstring, den du auf jeden Fall mit Operatoren wie >= berädern kannst.
Gruß -
Sebastian
habs jetzt so gelöst:
$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND CURRENT_DATE >= datum LIMIT 1";
Funktioniert für meine Bedürfnisse in diesem Fall.
Ahoi Pascal Müller,
$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND CURRENT_DATE >= datum LIMIT 1";
Funktioniert für meine Bedürfnisse in diesem Fall.
Wage ich zu bezweifeln da nächste woche das aktuelle datum immernoch
größer ist wie das wo in datum steht wirst du unter Umständen immer
den gleichen datensatz bekommen. Daher solltest du ein ORDER BY datum
DESC noch hinzufügen.
MfG
den gleichen datensatz bekommen. Daher solltest du ein ORDER BY datum
DESC noch hinzufügen.
order by war schon gut, aber aufsteigend! würde eventuell auch ohne funktionieren, wenn die tabelle nach datum sortiert würde.
Hi,
order by war schon gut, aber aufsteigend! würde eventuell auch ohne funktionieren, wenn die tabelle nach datum sortiert würde.
Und wie soll die Tabelle ohne "order by" sortiert werden?
cu,
Andreas
Und wie soll die Tabelle ohne "order by" sortiert werden?
indem die tabelle physisch aufsteigend nach datum sortiert wird.
ich hab diese Variable: $letzterdonnerstag (gibt "2005-09-01" aus)
Danach möchte ich _einen_ Datensatz aufrufen, dessen Datum grösser oder gleich "$letzterdonnerstag" ist. Das MySQL-Feld "datum" ist zb. 2005-09-07
$sql = "SELECT * FROM tm_news WHERE kategorie='1' AND datum >= $letzterdonnerstag LIMIT 1";
Bei mir funktioniert das, wenn ich um das Datum noch Anführungszeichen mache und wenn du nur den allerneusten haben willst, musst du natürlich noch nach dem Datum sortieren.
Struppi.