Andreas Schigold: Problem mit komplizierter SQL-Abfrage:

Beitrag lesen

Hi!

das klingt ja alles mächtig kompliziert. Eigentlich sollte man wohl den Zustand 'NULL' auch entsprechend abfragen können - eigentlich! Aber vielleicht geht 'NULL' und das Datumsformat nicht so richtig? Falls die NULL nämlich nicht richtig konsequent als Symbol für "nicht belegt" behandelt wird, können da evtl. unerwünschte Effekte auftreten. Nicht falsch verstehen, ich vermute den Fehler jetzt fast bei MySQL und weniger bei Dir.

In solchen Fällen versuche ich immer, ein wenig zu tricksen. In Deinem Fall könnte man z.B. als Standard-Datum den 1.Januar 1970 setzen oder auch auf Deinen Geburtstag oder - weiß der Geier auf was für einen Wert. Auf jeden Fall sollte das Datum als reales Ergebnis keinen Sinn ergeben.

Mit diesem Datum belegst Du eben generell die Datensätze, die neu angelegt werden bzw. wo die Produkte, die noch nicht bestellt wurden. Dieses Datum kannst Du ja dann explizit erfragen, also

where t1.bestellt != '01.01.1970' (oder wie die Syntax dazu jetzt auch ist, das weißt Du sicher besser - brauch ich jetzt nicht nachschauen)

Anderer Trick, den ich in PHP schon angewendet habe, weil Du damit scheinbar auch viel arbeitest:

strpos("abcd","bc") liefert eine 1
strpos("abcd","ab") liefert eine 0
strpos("abcd","xy") liefert ein false

datentechnisch ist die 0 und false das selbe, nämlich eine 0x00 (0x steht für hex-Zahl), nur an den Datentypen (int und boolean) kann man erkennen, ob der Suchstring ganz am Anfang steht oder nicht vorkommt. Das unter www.php.net vorgeschlagene Beispiel lief aber nicht. Da habe ich einfach folgendes gemacht:

$text = " $text"; // vornedran ein Leerzeichen oder eins, wonach man nicht als erstes sucht
$pos = strpos($text, "Suchbegriff"); // $pos ist nun immer >= 1 bei Erfolg und 0 bei Mißerfolg

// als letztes:
$text = substr($text, 1); // das Leerzeichen fliegt wieder raus

Eiegntlich finde ich das doof. In C liefert die entsprechnde Funktion eine -1 bei Mißerfolg. Aber was solls. Ich hoffe, daß mein Trick Dich weiterbringt.

Gruß,
Andreas