MySQL Anweisung : nicht kleiner als ein bestimmtes Datum

sajonara

Mitglied
Ich habe folgendes Problem:

in einer mysql-Anweisung möchte ich alle Datensätze selektieren, die NICHT kleiner als ein bestimmtes Datum sind.

Der Befehl select .... WHERE datum1 < $datum

reicht nicht aus.
Ich habe bereits mit select .... WHERE datum1 !< $datum probiert, aber führt zum Error..

Wer weiß Rat?

Gruß
Maurizio
 
Suche alle, die größer als oder gleich $datum sind, entspricht doch allen, die nicht kleiner als $datum sind :confused:
SQL:
SELECT * FROM foo WHERE datum1 >= $datum
Oder ich habe selbst einen Denkfehler, kann auch sein ^^

//edit: Ein Vergleich wie !< ist, meines Wissens nach, nicht möglich, was auch den Fehler erklärt. Ich kann mich auch täuschen, also noch auf ein paar andere Antworten warten.
 
Zuletzt bearbeitet von einem Moderator:
Danke für die schnelle Antwort!
Ok, war vielleicht etwas falsch beschrieben... Ich habe folgende Daten...

fzg-lfd-nr anfangDatum endDatum
2050 2008-05-10 2008-05-12
2050 2008-06-01 2008-08-10
2210 2007-12-15 2007-12-15
2215 2008-08-15 2008-08-16
2355 0000-00-00 0000-00-00

usw.

Ich möchte alle fzg-id suchen, die z.B. am 2008-06-26 frei währen....

hier mal mein wirklicher mysql-Befehl:

PHP:
$sql = "SELECT  f.*,fzg.fzg_modell  FROM fahrzeug fzg LEFT JOIN fahrt f ON  (f.fzg_lfd_nummer=fzg.fzg_lfd_nummer) 
WHERE   fzg.fzg_art='NW' AND (('$startDate' NOT BETWEEN f.anfangDatum AND f.endDatum)

										OR (ADDDATE('$startDate', 1) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 2) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 3) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 4) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 5) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 6) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 7) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 8) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate', 9) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',10) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',11) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',12) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',13) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',14) NOT BETWEEN f.anfangDatum AND f.endDatum) 
										OR (ADDDATE('$startDate',15) NOT BETWEEN f.anfangDatum AND f.endDatum)) ";

Das script soll herausfinden, ob ein Fahrzeug in den nächsten 14 tagen frei wäre.

Leider ist das Problem beim Fzg #2050, denn hier findet er einen Datensatz, der in Frage kommt... allerdings ist das ein altes Datum. Er vergisst dann, dass der Wagen aber in der zweiten Zeile doch vermietet ist....
Also wollte ich dem mysql-Befehl sagen, schauen nach Fahrzeugen ab aktuellem Datum aufwärts und denen die 0000-00-00 eingetragen haben..

Ich würde das ganze sonst auch gerne Online erklären.. Ich habe dazu ein Fernsteuerungsprogramm PC-Visit.... und Skype aldex_nicosia....
 
Hallo Sayonara,

so ungefähr müsste es laufen:

Mußt nur nochmal die Feldnamen anpassen: Problematisch kann ein Bindestrich in den Feldnamen sein. Benutze lieber einen Unterstrich, wenn möglich.


SELECT fzg.fzg_lfd_nr FROM fahrzeug fzg WHERE fzg.fzg_lfd_nr NOT IN (SELECT f.fzg_lfd_nr FROM fahrt f WHERE ('$startDate' between f.anfangdatum and f.enddatum) or ('$endDate' between f.anfangdatum and f.enddatum)) ;
 
Hallo Sphinx-Flash,

vielen Dank! Dies hat mich schon wesentlich weiter gebracht.
Ich habe nur noch folgendes Problem mit dem script....
Ich habe das $startDate das ein bestimmtes Datum ist.
Jezt das Problem: ich will auch gleichzeitig die nächsten 14 Tage abgreifen und sehen, ob der Wagen frei ist...
Also habe ich mir folgendes gedacht zu jedem $startDate ein ADDDATE zu ergänzen.
Leider führt die zu einer Fehlermeldung wie diese:
SELECT f.*,fzg.fzg_modell FROM fahrzeug fzg LEFT JOIN fahrt f ON (f.fzg_lfd_nummer=fzg.fzg_lfd_nummer) WHERE (fzg.fzg_art='VFW' OR fzg.fzg_art='VFW-V' OR fzg.fzg_art='VFW-T' ) AND fzg.fzg_lagerwagen= 1 AND (fzg.fzg_lfd_nummer NOT IN (SELECT f.fzg_lfd_nummer FROM fahrt f WHERE ('2008-06-13' BETWEEN f.anfangdatum and f.enddatum)) ) AND (fzg.fzg_lfd_nummer NOT IN (SELECT f.fzg_lfd_nummer FROM fahrt f WHERE ((ADDDATE('2008-06-13', 1) BETWEEN f.anfangdatum and f.enddatum))) Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

Mein aktueller script:
PHP:
SELECT fzg.fzg_lfd_nr FROM fahrzeug fzg WHERE fzg.fzg_lfd_nr NOT IN (SELECT f.fzg_lfd_nr FROM fahrt f 
WHERE  (fzg.fzg_lfd_nummer NOT IN (SELECT f.fzg_lfd_nummer FROM fahrt f WHERE ('$startDate' BETWEEN f.anfangdatum and f.enddatum))	) 
AND (fzg.fzg_lfd_nummer NOT IN (SELECT f.fzg_lfd_nummer FROM fahrt f WHERE ((ADDDATE('$startDate', 1) BETWEEN f.anfangdatum and f.enddatum)))";
 
Habe das Problem gefunden!!

Es war blöderweise eine Klammer, die den Fehler verursachte:eek:

Erst einmal vielen Dank an alle, die mir geholfen haben.
Evtl. komm ich noch mal auf das Thema zurück, da es noch nicht ganz rund läuft... aber jetzt habe ich z.Z. keine Zeit.

Gruß
Maurizio
 
Zurück