par
sadeq » 06 oct. 2005, 11:12
Si j'ai bien compris les id's commandes choisis sont stockés dans le tableau $_POST["100"].
Et tu veux afficher seulement les produits concernés par les commandes choisies : Dans ce cas il y a un p'ti problème dans ton code.
Effectivement t'as d'abord une erreur de syntaxe au niveau des jointures (JOIN) dans la clause FROM :
FROM (commande JOIN contient ON contient.commande_id = ('".$tab."')) ...
car tu n'a pas le droit d'incruster la variable $tab à cet endroit. (d'autant plus que $tab est un tableau)
Je comprends ce que tu veux faire : tu veux fixer une condition pour la requête, dans ce cas il faut utiliser la clause WHERE.
seulement le critère de WHERE doit être :
contient.id_commande = au moins à un id choisi dans la liste $_POST['100'].
Ceci peut être écrit, par exemple si $_POST['100'] contient les id's X, Y et Z, comme suit :
Code : Tout sélectionner
contient.commande_id = 'X' OR contient.commande_id = 'Y' OR contient.commande_id = 'Z'
Ce qui peut être simplifié en SQL par :
Sachant que sous PHP on peut transformer facilement un tableau sous forme de chaine au format "valeur1","valeur2",..,"valeurN". telque valeur1 à N sont celles contenues dans le tableau
La fonction qui fait ça est : implode() qui utilise un séparateur au choix (ici c'est la virgule) pour coller les pièces d'un tableau.
En utilisant cette fonction voici donc ton programme modifié à partir de la boucle foreach($_POST['100'] as $normal)... que je vais d'ailleurs virer parcequ'elle ne sert plus à grand chose en utilisant implode.
...
//Ex. foreach ($_POST['100'] as $normal) {
//Construire une chaine-liste à partir du tableau (avec séparateur virgule)
$liste_ids = implode(',', $_POST['100']);
//Ecrire la requête SQL
$sql_normal = "SELECT produit.produit_id, produit_designation, produit_num, sum(quantite) as quantité_sortie
FROM contient JOIN produit ON contient.produit_id=produit.produit_id
WHERE contient.commande_id IN ($liste_ids)
GROUP BY produit.produit_id, produit_designation, produit_num";
//Exécuter la requête et afficher le résultat
..... //comme tu là déjà
Si j'ai bien compris les id's commandes choisis sont stockés dans le tableau $_POST["100"].
Et tu veux afficher seulement les produits concernés par les commandes choisies : Dans ce cas il y a un p'ti problème dans ton code.
Effectivement t'as d'abord une erreur de syntaxe au niveau des jointures (JOIN) dans la clause FROM :
[quote]FROM (commande JOIN contient ON contient.commande_id = ('".$tab."')) ...[/quote]
car tu n'a pas le droit d'incruster la variable $tab à cet endroit. (d'autant plus que $tab est un tableau)
Je comprends ce que tu veux faire : tu veux fixer une condition pour la requête, dans ce cas il faut utiliser la clause WHERE.
seulement le critère de WHERE doit être :
contient.id_commande = au moins à un id choisi dans la liste $_POST['100'].
Ceci peut être écrit, par exemple si $_POST['100'] contient les id's X, Y et Z, comme suit :
[code]contient.commande_id = 'X' OR contient.commande_id = 'Y' OR contient.commande_id = 'Z'[/code]
Ce qui peut être simplifié en SQL par :
[code]contient.commande_id IN ('X', 'Y', 'Z')[/code]
Sachant que sous PHP on peut transformer facilement un tableau sous forme de chaine au format "valeur1","valeur2",..,"valeurN". telque valeur1 à N sont celles contenues dans le tableau
La fonction qui fait ça est : implode() qui utilise un séparateur au choix (ici c'est la virgule) pour coller les pièces d'un tableau.
En utilisant cette fonction voici donc ton programme modifié à partir de la boucle foreach($_POST['100'] as $normal)... que je vais d'ailleurs virer parcequ'elle ne sert plus à grand chose en utilisant implode.
[php]
...
//Ex. foreach ($_POST['100'] as $normal) {
//Construire une chaine-liste à partir du tableau (avec séparateur virgule)
$liste_ids = implode(',', $_POST['100']);
//Ecrire la requête SQL
$sql_normal = "SELECT produit.produit_id, produit_designation, produit_num, sum(quantite) as quantité_sortie
FROM contient JOIN produit ON contient.produit_id=produit.produit_id
WHERE contient.commande_id IN ($liste_ids)
GROUP BY produit.produit_id, produit_designation, produit_num";
//Exécuter la requête et afficher le résultat
..... //comme tu là déjà[/php]