Supportnet Computer
Planet of Tech

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: