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   -
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. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    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
  2. ssx32 Messages postés 10 Statut Membre
     
    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
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      Fais un echo $sql; avant ton mysql_query, je parie que ton erreur va te sauter aux yeux.
      0
  3. ssx32 Messages postés 10 Statut Membre
     
    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
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      Et qu'est ce qui cloche ce coup ci ? :)
      0
    2. ssx32 Messages postés 10 Statut Membre
       
      c'est encore la syntaxe du IN
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      oui
      0
    4. ssx32 Messages postés 10 Statut Membre
       
      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
    5. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      C'est une des possibilités, sinon tu peux utiliser la fonction implode
      0