Mysql/php:WHERE variable = alles

a*new*found*flo

Erfahrenes Mitglied
Hallo!

Ich habe nun vergeblich 2 Stunden lang das Internet durchkämmt und finde einfach keine Lösung für mein Problem. Vielleicht könnt ihr mir helfen:

Ich schreibe gerade an einer Filter-funktion um Resultate einer Datenbank einzugrenzen.
Über mehrere Eingaben sollen die Resultate eingegrenzt werden. Ist soweit auch kein Problem, nur soll auch die Möglichkeit gegeben sein manche Kriterien einfach frei zu lassen und somit alles anzeigen zu lassen, was dieses Kriterium betrifft.

Hier ne kleine Skizze dazu:

Bereich 1 - Auswahl: test1
Bereich 2 - Auswahl: test2

Die Abfrage dazu ist ja recht simpel:
PHP:
$query = mysql_query("SELECT * FROM $mysql_tablename 
WHERE bereich1 = 'test1' AND bereich2 = 'test2' ", $database);

Mein Problem besteht nun darin, das so umzubauen, dass wenn bei einer Select-Box "Any" ausgewählt wird er alles zulässt in der WHERE Abfrage.
Also so:
PHP:
$query = mysql_query("SELECT * FROM $mysql_tablename 
WHERE bereich1 = 'test1' AND bereich2 = 'ALLES VON BEREICH 2 ZULASSEN' ", $database);

Ich habe es bisher schon mit LIKE und % versucht bzw. mit "is not null", allerdings hat das auch zu nichts geführt.
Ich hoffe ich konnte mein Problem ausreichend erklären und hoffe weiters, dass mir jemand helfen kann.
Vielen Dank schon mal, Flo
 
Hi,

wenn es bei "alles" keine weiteren Einschränkungen gibt, daß der Wert z.B. nicht leer sein darf, kannst du den eigentlich weglassen. Dann würde den SQL String vorher aus den Einzelteilen zusammensetzen, die die gewählten Wert beinhalten. Also z.B. so:
PHP:
$sql = "SELECT * FROM $mysql_tablename WHERE ";

if ($test1 != 'any')
    $sql .= "bereich1 = 'test1' ";

if ($test2 != 'any')
    $sql .= "bereich2 = 'test2' ";
!Das ist stark gekürzt. Du mußt natürlich zwischendrin noch abklären, was die erste existierende WHERE Klausel ist und ob noch ein AND dazwischen muß oder nicht. Oder du hängst prinzipiell immer ein AND dahinter und kürzt den String am Schluß um 4 Zeichen.
 
Hi,

wenn es bei "alles" keine weiteren Einschränkungen gibt, daß der Wert z.B. nicht leer sein darf, kannst du den eigentlich weglassen. Dann würde den SQL String vorher aus den Einzelteilen zusammensetzen, die die gewählten Wert beinhalten. Also z.B. so:
PHP:
$sql = "SELECT * FROM $mysql_tablename WHERE ";

if ($test1 != 'any')
    $sql .= "bereich1 = 'test1' ";

if ($test2 != 'any')
    $sql .= "bereich2 = 'test2' ";
!Das ist stark gekürzt. Du mußt natürlich zwischendrin noch abklären, was die erste existierende WHERE Klausel ist und ob noch ein AND dazwischen muß oder nicht. Oder du hängst prinzipiell immer ein AND dahinter und kürzt den String am Schluß um 4 Zeichen.

Ahh, sehr schlau vielen Dank, das hilft enorm weiter!

Und am Schluss setze ich das nur noch in meine Query ein?!:
PHP:
$query = mysql_query("\"$sql\"",$database);

Kann es leider grad nicht ausprobieren. Meld mich dann nochmal, vielen Dank
 
Ahh, sehr schlau vielen Dank, das hilft enorm weiter!

Und am Schluss setze ich das nur noch in meine Query ein?!:
PHP:
$query = mysql_query("\"$sql\"",$database);

Kann es leider grad nicht ausprobieren. Meld mich dann nochmal, vielen Dank

Genau, aber die vielen " kannst du dir komplett sparen.
Viel Erfolg und noch einen schönen Feiertag.
 
Sehr gut, funktioniert. Kleine Änderung habe ich noch gemacht.
Man benötigt keine Überprüfung oder String-Kürzung, wenn man das "AND" einfach immer davor schreibt ...
So sieht mein Code nun aus und funktioniert einwandfrei:

PHP:
$sql = "SELECT * FROM $mysql_tablename WHERE activation = 1 "; 
	if($bereich1 != "any")
	{
	$sql .= " AND bereich1 = '$bereich1'";
	}
	if($bereich2 != "any")
	{
	$sql .= " AND bereich2 = '$bereich2'";
	}
$sql .= " ORDER BY bereich1";
	echo $sql;
	$query = mysql_query($sql, $database);
	$ergebnisse = mysql_num_rows($query);
.
.
.
.
Besten Dank nochmal und auch dir noch nen schönen Feiertag!
 
Zurück