PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql WHERE ohne Parameter



Mathew
16-08-2006, 16:34
Hallo zusammen,

folgender Befehl ist in einem Script hinterlegt:


SELECT Adresse FROM Kunden WHERE KundenID = '$KUNDENID'

klappt auch wunderbar. Nun möchte ich aber, dass wenn keine Auswahl getroffen wird, alle Kunden angezeigt werden. Ich bekomme dann aber eine SQL Fehlermeldung, da kein Wert nach WHERE angegeben wurde.

Gibt es ein Weg, den Befehl WHERE wieder auszuhebeln, ohne das man den eigentlichen Befehl entfernt.

Dachte wenn ich ein WHERE KundenID = '$KUNDENID' angebe und die Variable ist leer, dass er dann alle nimmt, aber ist nicht so :eek:

Alternativ könnte ich bei der Abfrage ja auch ein Wert hinterlegen, der dann bei der Übergabe der Variable in die WHERE Bedingung mit reingenommen wird. Ein % hat auch nicht geklappt :mad:

Bitte Hilfe. Danke.

mwanaheri
16-08-2006, 16:40
Wenn die Abfrage statt = like benutzt, kann man mit % arbeiten, allerdings ist der Vergleich mit like oft aufwendiger als der mit =.

Mathew
16-08-2006, 16:48
kraz, habs gerade getestet, dass ist genau das was ich brauchte. :D

Nun kann ich angeben, dass bei keiner Eingabe des Benutzers automatisch ein % als Variable gespeichert wird und dieses dann auch im SELECT Befehl die Bedingung für dieses Feld aushebelt.

Danke Dir.

jsp
16-08-2006, 18:35
hmm, wie gesagt, das ist nicht wirklich performant, lass lieber die komplette WHERE-CLAUSE weg, wenn keine Auswahl getroffen wurde.

Gruß

Jörn

Jasper
16-08-2006, 22:19
SELECT Adresse FROM Kunden WHERE KundenID = '$KUNDENID' or kundenid = ''

umgeht das LIKE.

-j

Pingu
17-08-2006, 09:15
Meiner Meinung nach würde ich es schon beim Zusammensetzten des SQL-Befehls berücksichtigen, z.B.
in php:
$sql = sprintf("SELECT Adresse FROM Kunden%s", ($KUNDENID ? sprintf(" WHERE KundenID = %d", $KUNDENID) : ""));

$sql = sprintf("SELECT Adresse FROM Kunden");
$sql .= $KUNDENID ? sprintf(" WHERE KundenID = %d", $KUNDENID) : "";

Pingu

Mathew
18-08-2006, 18:01
danke für die vielen Antwortmöglichkeiten :eek:

Also mit dem 'like' bekomme ich alles so hin wie ich brauche. Da es sich um eine komplette Netzwerkkassensoftware handelt die schon im Einsatz ist *stolz* fehlt mir auch die Zeit das ganze vielleicht so zu optimieren wie es eigentlich richig wäre.

Performance spielt eigentlich keine Rolle, da dieses Script nur aufgerufen wird, wenn der Einkaufsleiter seine automatische Bestellvorschlagsliste der einzelnen Filialen morgens um 9:00 Uhr sehen will.

Bevor ich so ein Script verbessere, sind sicher andere Scripte wie Umsatzstatistik oder Warenwert pro Filaile interessanter, die laufen nämlich die ganze Nacht durch :D Leider programmiere ich so wie ich denke, also nicht immer optimal, komme aber zum Ziel.

Ab dem 30. Shop (zur Zeit 18) wird dann die Nacht zu kurz, dann entweder die Scripte verbessern (wo noch ne Menge optimiert werden kann) oder nen schnelleren Server verwenden :)

Aber die Frage hier wurde durch mwanaher genau so beantwortet, wie ich sie brauchte :rolleyes:

Also Danke nochmal für Eure Hilfe.