Problème requête imbriquée

Résolu/Fermé
ssx32 Messages postés 10 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013 - 9 déc. 2013 à 09:21
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 - 9 déc. 2013 à 14:03
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 :


 
$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

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 déc. 2013 à 09:32
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.
0
ssx32 Messages postés 10 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
9 déc. 2013 à 09:47
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 déc. 2013 à 09:50
Fais un echo $sql; avant ton mysql_query, je parie que ton erreur va te sauter aux yeux.
0
ssx32 Messages postés 10 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
9 déc. 2013 à 10:12
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 déc. 2013 à 10:14
Et qu'est ce qui cloche ce coup ci ? :)
0
ssx32 Messages postés 10 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
9 déc. 2013 à 10:26
c'est encore la syntaxe du IN
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 déc. 2013 à 10:27
oui
0
ssx32 Messages postés 10 Date d'inscription mercredi 18 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
9 déc. 2013 à 13:57
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 
}
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
9 déc. 2013 à 14:03
C'est une des possibilités, sinon tu peux utiliser la fonction implode
0