Problème requête imbriquée
Résolu
ssx32
Messages postés
10
Statut
Membre
-
ThEBiShOp Messages postés 9307 Date d'inscription Statut Contributeur Dernière intervention -
ThEBiShOp Messages postés 9307 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai une requête sql imbriquée aprés la clause IN d'une autre requête, lorsque je teste sur la console sql ça marche nickel mais en php ça me sort :
mysql_fetch_array() expects parameter 1 to be resource
je résume une peu mon code :
cette requête me sert a filtrer les résultat par pays
quand je ne fait pas de filtrage la requête s'exécute normalement
si quelqu'un peut me dire ou je me suis planté ça sera sympa
merci :)
j'ai une requête sql imbriquée aprés la clause IN d'une autre requête, lorsque je teste sur la console sql ça marche nickel mais en php ça me sort :
mysql_fetch_array() expects parameter 1 to be resource
je résume une peu mon code :
$c = " AND 1=1";
if (!EMPTY($_POST['pays']))
{
$rep=mysql_query("SELECT nom FROM client WHERE pays= '".$_POST['pays']."'");
while ($row=mysql_fetch_array($rep)){
$repti=$repti .$row[nom];
}
$c = $c . "AND liste_commande.client IN ('".$repti."')";
}
$sql = "SELECT DISTINCT liste_commande.n_of,liste_commande.id,liste_commande.date,liste_commande.client,liste_commande.n_commande_client,liste_commande.reference_produit,liste_commande.designation,liste_commande.reference_client,liste_commande.delai_demande,liste_commande.site_concerne,liste_commande.quantite WHERE ".$c." ORDER BY liste_commande.date
";
$s = mysql_query($sql);
while ($r = mysql_fetch_array($s)){
// affichage des données
}
cette requête me sert a filtrer les résultat par pays
quand je ne fait pas de filtrage la requête s'exécute normalement
si quelqu'un peut me dire ou je me suis planté ça sera sympa
merci :)
3 réponses
-
Salut,
Déjà, à la suite de tes mysql_query, tu devrais rajouter un die :
$s = mysql_query($sql) or die(mysql_error());
S'il y a une erreur dans ta requête, ça te donnera des infos.
Ce que tu peux faire aussi, c'est afficher ton $sql pour être certain que la requête a été bien construite. -
merci ThEBiShOp pour ta réponse rapide,
séparément mes requêtes fonctionnent mais quand elles sont imbriquées ça plante.
avec le mysql_error() ça me dit que j'ai une erreur de syntaxe après le IN -
quand j'affiche la requête ce qui cloche c'est que après IN les résultats doivent être séparé par "," donc j'ai fait :
while ($row=mysql_fetch_array($rep)){ $repti=$repti .$row[nom]; $repti = $repti.",";
mais ça marche toujours pas :s-
-
-
-
j'ai trouvé la solution je post si quelqu'un en aura besoin
la clause in doit avoir cette syntaxe: IN ('var1','var2','var3') et mon code affiche ( var1,var2,var3,)
pour y remedier :$c = " AND 1=1"; if (!EMPTY($_POST['pays'])) { $rep=mysql_query("SELECT nom FROM client WHERE pays= '".$_POST['pays']."'"); while ($row=mysql_fetch_array($rep)){ $repti=$repti." ' " . $row[nom]; //ajouter le separateur " ' " avant la variable $repti = $repti." '," ; //ajouter le separateur " ' , " aprés la variable } $go=substr($repti, 0, -1); // enlever la dérniere virgule $c = $c . " AND liste_commande.client IN (".$go.")"; } $sql = "SELECT DISTINCT liste_commande.n_of,liste_commande.id,liste_commande.date,liste_commande.client,liste_commande.n_commande_client,liste_commande.reference_produit,liste_commande.designation,liste_commande.reference_client,liste_commande.delai_demande,liste_commande.site_concerne,liste_commande.quantite WHERE ".$c." ORDER BY liste_commande.date "; $s = mysql_query($sql); while ($r = mysql_fetch_array($s)){ // affichage des données } -
-