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 :)
A voir également:
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de pomme mais pas de pomme de terre ?
- Traitement de texte - Guide
- Navigateur web - Guide
- Impossible de supprimer une page word - Guide
- Google moteur de recherche page d'accueil - Guide
- 1 centième de terre en mètre carré ✓ - Forum Architecture / décoration
3 réponses
Salut,
Déjà, à la suite de tes mysql_query, tu devrais rajouter un die :
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.
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.
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 :
mais ça marche toujours pas :s
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 :
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
}