clause GROUP BY

WRInaute occasionnel
Bonjour,

Dans une boutique en ligne, beaucoup d'articles ont des déclinaisons (par ex., un même vêtement existe en plusieurs tailles et plusieurs coloris, etc). Dans mon cas, cela concerne du thé: un article (un thé quoi) peut se vendre en 4 conditionnements différents (100g, 200g, 500g, et 1kg).
Pour afficher les articles dans les rayons, j'ai donc une requête qui ressemble à
Code:
"SELECT * FROM articles, categories WHERE ... GROUP BY nom_article ORDER BY id_article..."
Tout est cool: chaque article est listé une seule fois, et en conditionnement 100g, comme voulu (il faut savoir que dans la bdd, les articles sont bien saisis dans le bon ordre) SAUF POUR UN ARTICLE (sur 450) !! Cet article apparaît en 200g par défaut !!
Question: lorsqu'on utilise la clause GROUP BY, comment sont ordonnés les items à l'intérieur ? Dans mon exemple, comment sont classés les 4 thés ayant le même nom ?
Merci de votre aide.
 
WRInaute impliqué
Il me semble que l'enregistrement representatif du GROUP BY est le premier trouvé dans la table.
Au cas où recrée ta table correctement ordonnée.
 
WRInaute discret
Tu devrais remplacer ta requete select ...group by..
Par :
SELECT distinct... order by...
 
WRInaute occasionnel
SELECT DISTINCT n'a pas fonctionné. Je me demande pourquoi. Il est vrai que ma requête est en réalité bien plus complexe que ce que j'avais écrit.
Par contre, j'ai réordonné ma table suivant les id_articles croissants (via PhpMyAdmin), et c'est devenu OK !!
Merci à vous. Prob résolu.
 
WRInaute passionné
Pour aller plus loin :
- Distinct serait plus approprié car moins consommateur de ressources
- Pour ce qui est de l'ordonnancement des items interne ce n'est pas automatiquement le premier rencontré, mais je ne sais pas comment ça marche exactement. J'ai résolu le problème en faitans une jointure sur la même table

Code:
SELECT t1.id, min(t2.cond) as cond
FROM table t1, table t2
WHERE t1.id=t2.id AND ....
GROUP BY t1.id

Si ça peut servir
 
Discussions similaires
Haut