Problème requête imbriquée

Résolu
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

  1. Contributeur
    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.
    1. 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
      1. Contributeur
        Fais un echo $sql; avant ton mysql_query, je parie que ton erreur va te sauter aux yeux.
    2. 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
      1. Contributeur
        Et qu'est ce qui cloche ce coup ci ? :)
      2. c'est encore la syntaxe du IN
      3. Contributeur
        oui
      4. 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 
        }
        
      5. Contributeur
        C'est une des possibilités, sinon tu peux utiliser la fonction implode