clause GROUP BY


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 29 Déc 2004

clause GROUP BY

Message le Mer Juin 20, 2007 9:14

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: Tout sélectionner
"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.

skippyzrnr
WRInaute impliqué
WRInaute impliqué
 
Messages: 664
Inscription: 11 Jan 2005

Message le Mer Juin 20, 2007 9:36

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.


lupuz
WRInaute discret
WRInaute discret
 
Messages: 212
Inscription: 15 Mar 2006

Message le Mer Juin 20, 2007 9:44

Tu devrais remplacer ta requete select ...group by..
Par :
SELECT distinct... order by...


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 29 Déc 2004

Message le Mer Juin 20, 2007 12:39

Merci les amis ! J'essaie de suite.


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 29 Déc 2004

Message le Mer Juin 20, 2007 12:47

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.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Mer Juin 20, 2007 16:32

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: Tout sélectionner
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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités