[MySQL] requête mal formulée ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par xdeslandes, 19 Décembre 2006.

  1. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    330
    J'aime reçus:
    0
    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 ??
     
  2. BadProcESs
    BadProcESs WRInaute passionné
    Inscrit:
    28 Juillet 2003
    Messages:
    1 821
    J'aime reçus:
    0
    Clause 'WHERE' ?
     
  3. narayana
    narayana WRInaute impliqué
    Inscrit:
    28 Janvier 2005
    Messages:
    727
    J'aime reçus:
    0
    Avec un "order by" le champ qu'il faut "asc" cela devrait fonctionner ?
     
  4. Adonfff
    Adonfff Nouveau WRInaute
    Inscrit:
    16 Octobre 2006
    Messages:
    39
    J'aime reçus:
    0
    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).
     
  5. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    330
    J'aime reçus:
    0
    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 ?
     
  6. ltressens
    ltressens WRInaute occasionnel
    Inscrit:
    2 Avril 2004
    Messages:
    451
    J'aime reçus:
    0
    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 :
    tomberait d'elle même car c'est une écriture de requête qui ne laisserait pas de doute...
     
  7. ptit_mousse
    ptit_mousse WRInaute discret
    Inscrit:
    19 Décembre 2006
    Messages:
    64
    J'aime reçus:
    0
    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...
     
  8. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    330
    J'aime reçus:
    0
    Dans la colonne 'conditionnement'.
     
  9. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 646
    J'aime reçus:
    38
    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
     
  10. ACth
    ACth WRInaute impliqué
    Inscrit:
    11 Novembre 2006
    Messages:
    686
    J'aime reçus:
    0
    Sauf que l'on peut utiliser les deux. La clause HAVING permet d'indiquer des conditions complémentaires sur le regroupement.
     
  11. ltressens
    ltressens WRInaute occasionnel
    Inscrit:
    2 Avril 2004
    Messages:
    451
    J'aime reçus:
    0
    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
    
     
  12. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    330
    J'aime reçus:
    0
    Merci, je vais essayer la clause HAVING. Elle devrait, si j'ai bien compris, me rendre service.
     
Chargement...
Similar Threads - [MySQL] requête formulée Forum Date
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
[MySQL] sélectionner la dernière note pour chaque élève en une seule requète ? Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[Mysql] Requête PDO avec variable php Développement d'un site Web ou d'une appli mobile 16 Février 2012
[Mysql] Requête PDO aléatoire Développement d'un site Web ou d'une appli mobile 7 Février 2012
[MySQL] Requête SELECT entre 3 tables liées Développement d'un site Web ou d'une appli mobile 10 Août 2011
[mysql] trier les résultats d'une requête selon une table non liée à la requête Développement d'un site Web ou d'une appli mobile 15 Avril 2011
(Résolu par une jointure)[MYSQL] Dissocier ma requête ? Administration d'un site Web 16 Juin 2008
[MYSQL] Pb de requête + optimisation structure table Développement d'un site Web ou d'une appli mobile 18 Janvier 2008
[MySQL] Requête imbriquée Développement d'un site Web ou d'une appli mobile 25 Juin 2007
[résolu][mysql] faire un "NOT LIKE" sur une chaîne contenant des / Développement d'un site Web ou d'une appli mobile 25 Octobre 2014
[MySQL] Liste (select) avec des lignes au hasard Développement d'un site Web ou d'une appli mobile 23 Octobre 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
[MYSQL] Comment remplacer caractères dans tous les champs de toutes les tables d'une base? Développement d'un site Web ou d'une appli mobile 11 Juillet 2013
[MYSQL] Une sorte de "OR JOIN" ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2013
[MYSQL] Tri par date Développement d'un site Web ou d'une appli mobile 7 Septembre 2011
[MySQL] rechercher une valeur dans un champ sérialisé Développement d'un site Web ou d'une appli mobile 10 Août 2011
[MySQL] addslashes et stripslashes Développement d'un site Web ou d'une appli mobile 9 Août 2011
[résolu] [mysql] Conditions WHERE avec AND et OR Développement d'un site Web ou d'une appli mobile 13 Mai 2011
[résolu] [mysql] passer un champ à une valeur donnée pour tous les enregistrements Développement d'un site Web ou d'une appli mobile 25 Mars 2011
[MySQL] INSERT / UPDATE conditionnel Développement d'un site Web ou d'une appli mobile 1 Février 2011