Select sql cu filtrare multipla

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje: 285

Select sql cu filtrare multipla

Salutare,

Am urmatorul table sql:

Cod: Selectaţi tot

tbl_masini
+----+-------+-------------+---------+
| ID | MODEL | COMBUSTIBIL | STARE   |
+----+-------+-------------+---------+
|  1 |  VW   |   Benzina   | Activ   |
|  2 |  VW   |   Motorina  | Activ   |
|  3 |  VW   |   Benzina   | Inactiv |
|  4 |  VW   |   Motorina  | Inactiv |
|  5 | Dacia |   Benzina   | Activ   |
|  6 | Dacia |   Motorina  | Activ   |
|  7 | Dacia |   Benzina   | Inactiv |
|  8 | Dacia |   Motorina  | Inactiv |
+----+-------+-------------+---------+
si urmatoarele selecturi:

Cod: Selectaţi tot

<form action="" method="POST">
<select name="model">
	<option selected="">TOATE MODELELE</option>
	<option value="VW">Volkswagen</option>
	<option value="Dacia">Dacia</option>
</select>

<select name="combustibil">
	<option selected="">TOTI COMBUSTIBILII</option>
	<option value="benzina">Benzina</option>
	<option value="motorina">Motorina</option>
</select>

<select name="stare">
	<option selected="">TOATE STARILE</option>
	<option value="activ">Activ</option>
	<option value="inactiv">Inactiv</option>
</select>
</form>
Cum pot exporta intr-un tabel html valorile din tabela sql dupa cum urmeaza:
la deschiderea paginii web toate selecturile vor fi setate pe: "TOATE MODELELE, TOTI COMBUSTIBILII si TOATE STARILE", in acest caz vor fi afisate toate valorile din tabela. Aici fac un query:

Cod: Selectaţi tot

$sql = "SELECT * FROM tbl_masini"
Pentru filtrul pe modelul masinii fac un query:

Cod: Selectaţi tot

$sql = "SELECT * FROM tbl_masini WHERE MODEL=$_POST['model']"
Problema mea apare cand incep sa fac diferite combinatii intre filtre.
Cum fac interogarile in asa fel incat sa reactioneaze la valorile selecturilor?

Multumesc!

MarPlo Mesaje: 4343
Salut
Vezi daca te ajuta acest cod:

Cod: Selectaţi tot

$where =[];
if(isset($_POST['model'])) $where[]="MODEL='". $_POST['model'] ."'";
if(isset($_POST['combustibil'])) $where[]="COMBUSTIBIL='". $_POST['combustibil'] ."'";
if(isset($_POST['stare'])) $where[]="STARE='". $_POST['stare'] ."'";

$sql ="SELECT * FROM tbl_masini WHERE ". implode(' AND ', $where);
echo $sql; //for test

sterica Mesaje: 285
Revin cu o precizare, cand se deschide pentru prima data pagina in aceata configuratie a interogarilor nu imi sunt afisate valorile. Insa doresc sa fie afisate toate valorile si sa le filtrez ulterior:

In aceasta configuratie filtre functioneaza numai daca sunt selectate toate, dar doresc sa fac o filtrare numai pe un select si restul sa afiseze toate valorile

Ma gandesc sa adaug in If-uri WHERE, dar nu stiu cum sa adaug AND-urile.

Cod: Selectaţi tot

$where =[];
if(isset($_POST['model'])) $where[]="WHERE MODEL='". $_POST['model'] ."'";
if(isset($_POST['combustibil'])) $where[]="WHERE COMBUSTIBIL='". $_POST['combustibil'] ."'";
if(isset($_POST['stare'])) $where[]="STARE='". $_POST['stare'] ."'";

$sql ="SELECT * FROM tbl_masini";
echo $sql; //for test
Multumesc!

MarPlo Mesaje: 4343
Vezi daca functioneaza asa, AND-urile se adauga la implode():

Cod: Selectaţi tot

$where =[];
if(isset($_POST['model'])) $where[]="MODEL='". $_POST['model'] ."'";
if(isset($_POST['combustibil'])) $where[]="COMBUSTIBIL='". $_POST['combustibil'] ."'";
if(isset($_POST['stare'])) $where[]="STARE='". $_POST['stare'] ."'";
$where = count($where)<1 ?'' : 'WHERE '. implode(' AND ', $where);

$sql ="SELECT * FROM tbl_masini $where";
echo $sql; //for test

sterica Mesaje: 285
multumesc mult de ajutorul acordat

Subiecte similare