IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requete avec count mais sans grouper.


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut Requete avec count mais sans grouper.
    Bonjour,

    Voilà, j'ai une table qui liste pour un objet donné, les id des éléments dont est constitué cet objet.
    par exemple :
    objet élément
    toto 5
    toto 8
    toto 12
    titi 4
    titi 8
    tutu 7
    tata 1
    tata 3
    tata 12
    tata 2
    signifie que l'objet toto est constitué des éléments 5 8 et12
    signifie que l'objet titi est constitué des éléments 4 et 8
    signifie que l'objet tutu est constitué de l'élément 7
    signifie que l'objet tata est constitue des éléments 1 2 3 et 12
    je cherchais une requête qui sort chaque objet s'il contient plus d'un élément et trie par le nombre d'éléments dont il constitué mais en gardant chaque ligne visible !
    tutu est constitué de 1 élément
    titi est constitué de 2 éléments
    toto est constitué de 3 éléments
    tata est constitué de 4 éléments
    et avoir une sortie du genre
    objet élément count
    titi 4 2
    titi 8 2
    toto 5 3
    toto 8 3
    toto 12 3
    tata 1 4
    tata 3 4
    tata 2 4
    tata 12 4
    si je fais un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select objet, count(objet) ct 
    from table 
    group by objet 
    having ct > 1 
    order by ct asc, objet asc  ;
    j'obtiens :
    titi 2
    toto 3
    tata 4
    ok, tutu n'apparait plus, mais j'ai perdu l'info de savoir quels sont les éléments dont sont constitués chaque objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select objet, element, count(objet) ct 
    from table 
    group by objet 
    having ct > 1 
    order by ct asc, objet asc  ;
    j'obtiens :
    objet élément count
    titi 4 2
    toto 5 3
    tata 1 4
    Je n'ai QUE le premier élément pour chaque objet et pas les autres.
    J'ai essayé des solutions avec "distinct objet" sans succès.
    J'ai essayé d'enlever le group by car c'est lui je pense qui réalise l'agrégation des lignes, mais cela ne donne rien non plus.
    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tu devrais regarder du côté de la fonction GROUP_CONCAT.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    J'ai été voir la doc mysql, j'ai rien compris sur ce que fait cette fonction !

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par fabrice91 Voir le message
    J'ai été voir la doc mysql, j'ai rien compris sur ce que fait cette fonction !
    Dans ton cas
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select objet, count(objet) ct, GROUP_CONCAT(`élément`) elements
    from `table` 
    group by objet
    order by ct asc, objet asc ;
    devrait te retourner une ligne par objet avec, en troisième colonne elements, la liste des éléments de l'objet séparés par des virgules.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    Merci, ça marche parfaitement bien sauf que je ne comprends pas comment ça marche et ce que l'on peut mettre d'autre dans la fonction GROUP_CONCAT !
    Par exemple la liste d'éléments qui est concaténée est une liste d'id et j'aimerais dans la même requête au lieu d'afficher les id, afficher les noms des éléments, donc pour cela il faut inserer un SELECT dans la fonction GROUP_CONCAT ?

    edit: oups ça a l'air bon, j'ai mis un where derrière le from, c'est bon...

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par fabrice91 Voir le message
    Par exemple la liste d'éléments qui est concaténée est une liste d'id et j'aimerais dans la même requête au lieu d'afficher les id, afficher les noms des éléments, donc pour cela il faut inserer un SELECT dans la fonction GROUP_CONCAT ?
    Non, il faut mettre la table en jointure avec celle qui contient les libellés des éléments et remplacer le nom de la colonne dans la fonction GROUP_CONCAT, laquelle, je le précise au passage, accepte sa propre clause ORDER BY.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Double requete avec _GET mais pas avec _POST
    Par rickilami dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2008, 16h03
  2. [mysql 5] requete avec count+ having + group by
    Par epeichette dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/10/2008, 19h52
  3. Requetes Avec Count et condition sur date
    Par Harry dans le forum WinDev
    Réponses: 1
    Dernier message: 04/06/2007, 15h23
  4. Comment optimiser une Requete avec Count ?
    Par tavarlindar dans le forum Requêtes
    Réponses: 15
    Dernier message: 09/02/2007, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo