problema con confronto dati

davidedavide

Nuovo Utente
14 Mag 2014
1
0
0
Buonasera a tutti,
questo è il mio primo post in questo blog

sono quasi nuovo di mysql,
vi spiego il mio problema,
io dovrei creare un sistema per controllare in base agli ingredienti disponibili quali pizze posso fare e quali no,

ho una tabella pizze dove ci sono segnati gli ingredienti per ciascuna pizza:

id_pizza= 1
ingr_1= pomodoro
ingr_2= prosciutto crudo

id_pizza=2
ingr_1=mozzarella
ingr_2=funghi
ingr_3=pancetta


da un form ho la lista di checkbox degli ingredienti che devo spuntare,
PHP:
<?php

	include "gestione_DB_NEW.php";

	$sql="SELECT `nome_ingrediente` FROM `P_ingredienti` ORDER BY P_ingredienti.`nome_ingrediente` ASC";

	$recordset= dammirighe($sql);

	echo '<form action="trova_pizze.php" method="post">';
	echo "<legend>Scegli gli ingredienti disponibili:</legend><br>";
 
	foreach ($recordset as $riga) {
		foreach ($riga as $campo => $valore_campo) {
			
			echo '<input type="checkbox" name="ingredienti[]" value="'.$valore_campo.'"/> '.$valore_campo;
			echo "<br />";	
		}
	}
	
	echo '<INPUT type="submit" value="Trova pizze">';
	echo "</form>";

?>

adesso però non riesco a capire come interrogare il database per fare in modo che mi restituisca SOLO le pizze i cui gusti siano TUTTI disponibili

vi ringrazio anticipatamente
ciao Davide
 
Ultima modifica di un moderatore:
cioa
prova una cosa del genere
intanto devi trasmettere anche il nome del campo correlato all'ingrediente, es. concatenando il nome campo col suo valore tramite il carattere |
PHP:
<?php
//.....
 foreach ($recordset as $riga) {
        foreach ($riga as $campo => $valore_campo) {
            echo '<input type="checkbox" name="ingredienti[]" value="'$campo.'|'.$valore_campo.'"/> '.$valore_campo;
            echo "<br />";    
        }
    } 
//.....
?>
poi nella pag. trova_pizze.php
PHP:
<?php
//.....
$ingredienti=$_POST['ingredienti'];//leggi quanto inviato
$wh="WHERE ";//inizializzi la variabile
foreach($ingredienti as $incrediente){
	$val=explode("|", $incrediente);
	$wh.=" ".$val[0]."=\"".$val[1]."\" AND ";//concateni in modo da otenere il WHERE della select
}
$wh.="1=1";//per evitare di togliere l'ultimo AND
/*
la variabile $wh alla fine risulterà es.
$wh=WHERE  ingr_1= "pomodoro" AND ingr_2= "prosciutto crudo" AND 1=1
*/
if($wh=="WHERE 1=1"){//se $_POST['ingredienti'] è vuoto
	echo "non hai selezionato gli ingredienti";
	//...
}else{//altrimenti mostri il risultato
	$sql="SELECT * FROM P_ingredienti $wh";
	//.....
}
//.....
?>
prova e sappimi dire

una cosa:
stai usando le istruzioni php msql? se si abbandonale sono deprecate e passa alle php mysqli o alla classe pdo
 
il mio suggerimento è di costruire una query che cerca tutte le pizze con gli ingredienti NON disponibili
gli ingredienti derivano dalle checkbox non marcate
(scusa, non ti posto lo script)

Codice:
select distinct pizza from tabellapizze 
where ingr_1 in ('funghi', 'peperoni' ....) 
or ingr_2 in  ('funghi', 'peperoni' ....)
or ripetuto per il numero di ingredienti previsti nel db

poi scrivi una seconda query che contiene la prima

Codice:
select distinct pizza from tabellapizze 
where pizza not in (select precedente)

con questa query combinata hai la lista delle pizze con i componenti presenti

credo che sia più semplice che "giri di programma" anche se poi tutto dipende dalla struttura del database

chissà Borgo potrebbe aiutarci a tradurla in pratica, soprattutto con un array dei componenti non disponibili
inclusa nella select

ciao
Marino
 

Discussioni simili