Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Problem bei Mysql Abfrage
Frage
Hi,
habe ein kleines Problem bei meiner SQL-Abfrage und weiss nicht wie ich da rangehen soll.
Benutze ein Formular (POST) was mir die benötigten Daten zur Verfügung stellt um die richtigen Datensätze ausfindig zu machen, das Problem hierbei nun ist, das alle Felder frei untereinander kombinierbar sind um Kritierien für dich Suche festzulagen.
Die folgenden Werte kann ich über das Formular bekommen:
keyword, TYPE, USN_CLASS, CLASS, STATUS und FLEET
Wobei keyword einfach eine Stichwortsuche in mehreren Feldern durchführt.
Würde ich jetzt nur noch Keyword suchen wäre meine Abfrage also so: [code]WHERE NAME LIKE '%" . $_POST['keyword'] . "%' OR CLASS LIKE '%" . $_POST['keyword'] . "%' OR USN_CLASS LIKE '%" . $_POST['keyword'] . "%' OR COMMENT LIKE '%" . $_POST['keyword'] . "%' ";[/code]
Hätte der Benutzer nun aber Keyword und STATUS angeben müsste sie ja lauten:
[code]WHERE STATUS = '" . $_POST['keyword'] . "' AND (NAME LIKE '%" . $_POST['keyword'] . "%' OR CLASS LIKE '%" . $_POST['keyword'] . "%' OR USN_CLASS LIKE '%" . $_POST['keyword'] . "%' OR COMMENT LIKE '%" . $_POST['keyword'] . "%') ";[/code]
Das konkrete Problem bei dem ich nun nicht weiter weiss ist einfach, das es ja unzählige Kombinationen geben kann, die nicht so ohne weiteres zusammengefügt werden können.
Ich wollte erst einfach über
[code]if(!empty($_POST['USN_CLASS']))[/code]
checken ob der betreffende Parameter gesetzt ist und ich ihn zum Query hinzufügen muss, aber ich weiss ja nie was davor oder dahinter noch kommt (wenn ich nicht 20 if-Statements einbaue) und kann so nun nicht wissen wenn ich ein AND oder ein WHERE einbauen muss? (die Abfrage könnte gänzlich ohne Parameter aus dem Formular ablaufen ... dann sollten eben einfach alle Elemente aus der DB ausgewählt werden,
z.B. könnte ja alles bis auf FLEET leer sein, dann müsste ich ja mit 5 if-Abfragen erstmal bestimmen ob da nun ein WHERE oder ein AND hinkommt - bei allen Kombinationen würde ich ja einen halben Tag if-Anweisungen schreiben ...
gibt es da nicht irgendwie eine einfachere Methode?
Kann natürlich echt sein, dass ich hier gerade total auf dem Schlach steht ...
naja hoffe das ich mein Problem halbwegs vernünftig beschreiben konnte. ;)
Grüße,
Tolli
Antwort 1 von Tolli
umm .. habe in der Eile was falsch rauskopiert im zweiten Beispiel muss es natürlich heißen
WHERE STATUS = '" . $_POST['STATUS'] ....
Antwort 2 von Supermax
mach einfach
Ich baue mir den Bedingungsblock meistens so zusammen:
WHERE 1 AND .....
und dann füge alle Abfragen hinzu, die in die AND-Verknüpfung hereingehören.Ich baue mir den Bedingungsblock meistens so zusammen:
$cond = '1';
if (!empty($_POST['feld'])) {
$cond .= " AND feld = '".mysql_escape_string($_POST['feld'])."'";
}
// usw...
Antwort 3 von Tolli
ah, vielen Dank!
Super Tipp! ... das ich da nicht selbst drauf gekommen bin ...
Grüße,
Tolli
Super Tipp! ... das ich da nicht selbst drauf gekommen bin ...
Grüße,
Tolli