[MySQL] requête mal formulée ?

WRInaute occasionnel
Bonjour,

J'ai des articles qui ont le même nom, mais qui sont conditionnés suivant 4 possibilités 100g, 200g, 500g, 1kg). Ces 4 articles sont affichés dans une seule fiche-article, contenant un petit menu déroulant permettant de choisir le conditionnement.

Pour lister mes articles (et ainsi faire un lien vers chaque fiche) je fais un truc du genre :
Code:
$req = "SELECT nom_article, id_article FROM articles";
$req .= " GROUP BY nom_article";
Comme cela, seul un article avec le même nom (au lieu des 4) apparaît. le problème c'est que j'aimerais que cela soit TOUJOURS celui de 100g qui paraisse.

Comment formuler ma reqûete pour cela ??
 
Nouveau WRInaute
Structure

Quelle est la structure de la base de données ?
Une base de données bien construite facilite souvent l'écriture des requêtes(Merise, UML).
 
WRInaute occasionnel
J'ai contourné le pb en ajoutant une bête clause WHERE, mais dans ce cas, je ne me sers plus de la clause GROUP BY puisque la clause WHERE ne fait remonter qu'un article sur les 4 ayant le même nom.
Bon, cela fonctionne. Mouais.
La question demeure : lorsqu'on utilise la clause GROUP BY telle_colonne, le SGBD ne retourne alors qu'un enregistrement si plusieurs ont une valeur de telle_colonne commune. Oui, mais lequel ?
 
WRInaute occasionnel
Un SGBD comme Oracle n'aurait pas accepté cette écriture.
Une opération aurait du être appliquée sur le champ id_article.
sum(), min(), max(), count()....
ainsi ta question :
xdeslandes a dit:
La question demeure : lorsqu'on utilise la clause GROUP BY telle_colonne, le SGBD ne retourne alors qu'un enregistrement si plusieurs ont une valeur de telle_colonne commune. Oui, mais lequel ?
tomberait d'elle même car c'est une écriture de requête qui ne laisserait pas de doute...
 
WRInaute discret
Pour répondre correctement à la question il faudrait déjà savoir ou est caché l'info du poids, car au niveau de ta requête je vois pas quelle colonne contient cette donnée...
 
WRInaute accro
Bonjour
D'après mes deux stages sur les SGBDR...

Une clause SELECT champs_1, champs_2 FROM table GROUP BY champs_1 HAVING champs_2 < condion>

Donc, pour préciser l'ensemble des enregistrements de la table à prendre en compte lors du requête comportant un GROUP BY, il faut théoriquement utiliser HAVING <condition> au lieu de WHERE <condition>

Cependant, il me semble avoir lu il y a pas mal de temps, que MySQL acceptait quand même les WHERE même dans le cas du GROUP BY, mais en tout cas, il est certain qu'avec la clause HAVING <condition> ça marche.

Evidemment, <condition> dépendra des valeurs sélectionnées, je ne m'avance pas au point de savoir si le champ figurant dans la clause GROUP BY, peut également figurer dans la <condition>

De mon temps, c'était la norme SQL92, celà a du beaucoup évoluer depuis...

Bien à toi.
Amicalement.

Jean-François Ortolo
 
WRInaute impliqué
Sauf que l'on peut utiliser les deux. La clause HAVING permet d'indiquer des conditions complémentaires sur le regroupement.
 
WRInaute occasionnel
oui d'ailleurs on ne peut poser des conditions sur une colonne groupée que par having, aolrs qu'on peut poser une condition sur une autre colonne par un where :
Code:
SELECT type, count(*) AS compte FROM table WHERE valide=1 HAVING compte = 3
 
Discussions similaires
Haut