Problème requête imbriquée

Résolu
ssx32 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
ThEBiShOp Messages postés 8411 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 :


 
$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 :)
A voir également:

3 réponses

ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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   Statut Membre Dernière intervention  
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
Et qu'est ce qui cloche ce coup ci ? :)
0
ssx32 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
c'est encore la syntaxe du IN
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
oui
0
ssx32 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
C'est une des possibilités, sinon tu peux utiliser la fonction implode
0