online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Tolli vom 01.07.2019, 23:43 Options

Problem bei Mysql Abfrage

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:
WHERE NAME LIKE '%" . $_POST['keyword'] . "%' OR CLASS LIKE '%" . $_POST['keyword'] . "%' OR USN_CLASS LIKE '%" . $_POST['keyword'] . "%' OR COMMENT LIKE '%" . $_POST['keyword'] . "%' ";


Hätte der Benutzer nun aber Keyword und STATUS angeben müsste sie ja lauten:
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'] . "%') ";


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
if(!empty($_POST['USN_CLASS']))

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 schreiben

Antwort 1 von Tolli vom 01.07.2019, 23:53 Options

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 vom 02.07.2019, 08:36 Options

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 vom 02.07.2019, 08:45 Options

ah, vielen Dank!
Super Tipp! ... das ich da nicht selbst drauf gekommen bin ...
Grüße,
Tolli

Ähnliche Themen

MySQL-Abfrage per while()
mooritz  08.05.2007 - 97 Hits - 7 Antworten

MySQL-Abfrage ->zählen
stef12  24.11.2007 - 83 Hits - 2 Antworten

MySQL / ODBC unter Vista sehr langsam
alialialiali  21.02.2008 - 95 Hits -

Von Datum 3 Tage abziehen
claudiagauss  03.03.2008 - 63 Hits - 3 Antworten

MYSQL Abfrage 5 -> 4
derleinich  13.04.2008 - 39 Hits -

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026