Query per ricerca

alexgentili

Utente Attivo
15 Lug 2010
39
0
0
Ciao a tutti.
Il mio problema da principiante di php è questo:

Ho una tabella che si chiama magazzino che contiene i dati:

id | tipo_negozio | genere
1 | negozio_1 | jeans
2 | negozio_2 | maglia


Ho fatto 2 select che mi propongono i risultati estratti da altre 2 tabelle del db:

$query_tipo = "SELECT * FROM tipo_negozio ORDER BY id";
$result_tipo = mysql_query($query_tipo) or die("Errore...");
$numrows_tipo = mysql_num_rows($result_tipo);
//Realizzo un ciclo for che si ripete per il numero di occorrenze trovate
for($x=0; $x<$numrows_tipo; $x++){
//Recupero il contenuto di ogni record trovato
$resrow_tipo = mysql_fetch_row($result_tipo);
//Stampo il risultato come link in una riga di tabella
echo stripslashes("<option value=\"$resrow_tipo[1]\">".
$resrow_tipo[1]."</option>");
}
}

$query_tipo = "SELECT * FROM genere ORDER BY id";
$result_tipo = mysql_query($query_tipo) or die("Errore...");
$numrows_tipo = mysql_num_rows($result_tipo);
//Realizzo un ciclo for che si ripete per il numero di occorrenze trovate
for($x=0; $x<$numrows_tipo; $x++){
//Recupero il contenuto di ogni record trovato
$resrow_tipo = mysql_fetch_row($result_tipo);
//Stampo il risultato come link in una riga di tabella
echo stripslashes("<option value=\"$resrow_tipo[1]\">".
$resrow_tipo[1]."</option>");
}
}

Ora devo fare una query che mi permetta di ricercare all'interno della tabella magazzino i dati che l'utente vuole estrarre.

Questa ricerca deve poter essere fatta sia dalla prima select da sola( quindi filtrando solo i negozi), sia dalla seconda select da sola, filtrando solo il genere, oppure da tutte e 2 le select assieme, filtrando contemporaneamente ( tipo_negozio e genere ).

Quello che sono arrivato a fare io è la segente query che pero' mi filtra solo le 2 select assieme con la funzione (AND ) oppure una sola select alla volta con la funzione ( OR ) .

$query = "SELECT * FROM magazzino WHERE tipo_negozio='$tipo_negozio' AND genere='$genere ";
$result = mysql_query($query) or die("Errore su esecuzione delle query...");
//conto il numero di occorrenze trovate nel db
$numrows = mysql_num_rows($result);
//se il database è vuoto lo stampo a video
if ($numrows==0) echo "<center><br>"."Nessun articolo trovato !"."</center>";
//Se invece trovo delle occorrenze...

//Realizzo un ciclo for che si ripete per il numero di occorrenze trovate
for($x=0; $x<$numrows; $x++){
//Recupero il contenuto di ogni record trovato
$resrow = mysql_fetch_array($result);
//Stampo il risultato come link in una riga di tabella
$prog_list++;

grazie a chi volesse aiutarmi.
 
Non ho capito molto...

Allora la struttura del db è errata perchè i generi devono avere una loro tabella "generi" con id e descrizione ad esempio, mentre in magazzino avrai il campo id_genere (chiave esterna 1 a N).

Credo ke il tuo sia il solito problema di ricerca no?
Tipo: L'utente ha 2 select in cui ci sono in una tutti i generi e nell'altra tutti i tipi_negozi.
Tu vuoi fare una semplice ricerca che: se l'utente non seleziona nulla vede tutto, se seleziona una delle select filtra.

E' molto semplice, devi praticamente comporre la query a seconda dei casi e poi eseguirla:

Nel form hai 2 select così
HTML:
<select name="tipo_negozio"><?php
//qui cè la $query_tipo
?>
</select>

<select name="genere"><?php
//qui cè la $query_genere!!! Non tipo!
?>
</select>

Qui componi ed esegui la query:
PHP:
//Così selezioni tutto
$q="SELECT * FROM magazzini WHERE 1=1";
if($tipo_negozio=$_POST['tipo_negozio']) {
     $q.=" AND tipo_negozio='$tipo_negozio'";
}
if($genere=$_POST['genere']) {
     $q.=" AND id_genere='$genere'";
}
$q.=" ORDER BY tipo_negozio ASC";
//Qui poi la esegui e fai la nuova lista coi risultati

Capito + o - ???
 

Discussioni simili