# MySQL Anweisung : nicht kleiner als ein bestimmtes Datum



## sajonara (26. Juni 2008)

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


----------



## Loomis (26. Juni 2008)

Suche alle, die *größer als oder gleich* $datum sind, entspricht doch allen, die *nicht kleiner als* $datum sind 

```
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.


----------



## sajonara (26. Juni 2008)

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:


```
$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....


----------



## Sphinx-Flash (26. Juni 2008)

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)) ;


----------



## sajonara (27. Juni 2008)

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:

```
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)))";
```


----------



## sajonara (27. Juni 2008)

Habe das Problem gefunden!!

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

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


----------



## Sphinx-Flash (27. Juni 2008)

Gerne geschehen Sajonara


----------

