concaténer les résultats d'une boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : concaténer les résultats d'une boucle

par dread » 03 mars 2008, 11:12

Merci à tout le monde pour vos réponses!
La méthode de Ryle a payé. J'arrive à faire ce que je voulais.
Merci encore et bonne continuation à vous.

par Ryle » 02 mars 2008, 20:42

Et pourquoi pas un IN() et profiter du distinct sur l'ensemble ?

Code : Tout sélectionner

SELECT ref_produit FROM tbl_commande_produit WHERE commande_id IN (1, 4, 6) AND ref_produit <> 4
La liste des id dans le IN ne devrait pas être bien compliquée à contruire (avec un tableau et un implode(',' , ...) par ex.)

par Hywan » 02 mars 2008, 19:46

Et pourquoi ne pas faire un UNION de toutes tes sélections (si ton moteur le permet) ?

par damdec » 02 mars 2008, 19:34

pour virer des doublons dans un tableau il y a aussi la fonction array_unique() de php, bien pratique mais pas forcement aussi performante que le moteur mysql bien utilisé -;) à toi de voir !

par Patriboom » 01 mars 2008, 16:32

Si tu veux de l'aide, il faudrait fournir la structure des tables touchées par ta demande. Aussi, tu devrais fournir une base de programmation PHP avec commentaires sur ce qui fonctionne, ce qui bloque et les objectifs à atteindre.

À partir de là, nous pourrons passer de la causerie à la programmation.

par dread » 01 mars 2008, 15:54

Pour les distincts sur chacune de mes requetes, ca ne marchera pas puisqu'il n'ya pas de doublons de produits dans une même commande.
Le distinct devrait alors fonctionner sur le résultat "concaténé" de toutes les requêtes de la boucle.
Il faudrait peut-être que j'arrive à enregistrer tous les résultats dans un même tableau pour ensuite éliminer les doublons. Mais là, je vois pas trop comment faire et si c'est réalisable.

J'ai une table pour la commande qui récapitule les éléments communs à chaque commande, puis une table contenant les produits de la commande.

C'est d'ailleurs sur cette dernière table que mes requetes portent puisque elle contient tous les éléments dont j'ai besoin.

J'ai aussi une table avec tous les produits et leurs caractéristiques.

J'ai regardé du côté du LEFT join pour voir si ca pouvait me convenir et malheureusement non!

Merci quand même.

par Patriboom » 01 mars 2008, 14:53

Pour éviter les doublons, tu peux exploiter DISTINCT dans tes requêtes:

Code : Tout sélectionner

SELECT DISCTINCT ref_produit FROM tbl_commande_produit WHERE commande_id='1' AND ref_produit<>'4' SELECT DISCTINCT ref_produit FROM tbl_commande_produit WHERE commande_id='4' AND ref_produit<>'4' SELECT DISCTINCT ref_produit FROM tbl_commande_produit WHERE commande_id='6' AND ref_produit<>'4'

Je vois difficilement comment éviter la boucle dans la boucle pour arriver à tes fins. De bons programmeurs se pencheront sur la question et te donneront une meilleures réponses prochainement. Si tu veux seulement avoir un produit associé par produit choisi, une requête incluant un LEFT JOIN peut donner les résultats escomptés. Il faudrait pour cela voir la structure de ta base de données. Tu dois avoir un table "achat" et une autre "liste de produits" ou quelque chose du genre.
Si tu veux de l'aide ici, il faudrait fournir plus d'outils.[/php]

concaténer les résultats d'une boucle

par dread » 01 mars 2008, 12:32

Bonjour à tous!

Je réalise une boutique en ligne pour des amis. Sur la fiche descriptive d'un produit, je souhaite faire afficher les autres produits que les internautes auraient achetés avec le produit décrit genre: "Les internautes ayant acheté ce produit ont aussi acheté :"

Pour le moment, je résonne comme ca:

Je dresse la liste des commandes comportant le produit concerné.
Ensuite, je dresse la liste des produits, différent de celui concerné, présents dans les commandes résultant de la première requête.

ce qui me donne:

Code : Tout sélectionner

SELECT ref_produit FROM tbl_commande_produit WHERE commande_id='1' AND ref_produit<>'4' Autres produits: 1 SELECT ref_produit FROM tbl_commande_produit WHERE commande_id='4' AND ref_produit<>'4' Autres produits: 2 Autres produits: 3 SELECT ref_produit FROM tbl_commande_produit WHERE commande_id='6' AND ref_produit<>'4' Autres produits: 1
Donc j'arrive bien à avoir les produits qui ont aussi été commandés avec le produit concerné.
Néanmoins j'ai des doublons que je voudrais enlevé (comme avec le produit ayant pour référence 1 qui est présent deux fois).
De plus, je ne suis pas sûr de pouvoir utiliser les résultats sous cette forme, puisqu'il s'agit d'une boucle de produits dans une boucle de commandes.

Comment faire, donc, pour éviter les doublons de produits?
Pourrait-je utiliser les résultats donnés pour dresse une seule liste des "autres produits achetés".

Peut-être que je ne suis pas la bonne méthode?

Merci par avance pour vos explications.