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

Langage SQL Discussion :

Group by et count : une seule ligne renvoyée


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut Group by et count : une seule ligne renvoyée
    Bonjour,
    J'ai cette requête,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t.id_tourisme as album_id, t.libelle_tourisme as libelle_album, COUNT(*) as nb_photos FROM types_tourisme t
    LEFT JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY gp.album_id
    ORDER BY t.libelle_tourisme
    Je souhaite à coté de chaque libelle_album, le nombre de photos associées. Mais ceci me retourne plutot le libellé du premier album et le nombre total des albums. Je n'ai donc ni la liste des autres albums, ni le nombre de photos à chaque album.

    Merci d'avance...

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le count doit s'appliquer à quelque chose qui te permet de repérer ce que tu veux compter, par exemple la clé primaire de la table galerie_photos (en supposant qu'un enregistrement de la table galerie_photos corresponde à une photo)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT t.id_tourisme as album_id, t.libelle_tourisme as libelle_album, COUNT(gp.id) as nb_photos FROM types_tourisme t
    LEFT JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY gp.album_id
    ORDER BY t.libelle_tourisme
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t.libelle_tourisme AS libelle_album, COUNT(gp.id_photo) AS nb_photos FROM types_tourisme t
    LEFT JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY gp.album_id
    ORDER BY t.libelle_tourisme
    Résultat
    libelle_album nb_photos
    Ecotourisme 0
    Je ne vois pas les autres libellés.

    Merci d'avance...

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Celira Voir le message
    Le count doit s'appliquer à quelque chose qui te permet de repérer ce que tu veux compter, par exemple la clé primaire de la table galerie_photos (en supposant qu'un enregistrement de la table galerie_photos corresponde à une photo)
    Merci.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    J'ai un peu perdu le fil : ça fonctionne ou pas ?
    Si ça ne fonctionne toujours pas, il faudrait nous donner les structures des tables, histoire qu'on sache où se trouve quoi.

    Si ça fonctionne, un petit clic sur
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Celira Voir le message
    J'ai un peu perdu le fil : ça fonctionne ou pas ?
    Ça fonctionne partiellement car la requête me déjà un album et le nombre de photos dans cet album.
    libelle_album nb_photos
    Ecotourisme 0
    Mais je ne vois pas les autres albums même comme tous ne possèdent pas encore de photos. On devrait avoir la liste de tous les albums et à coté de chaque album, le nombre de photos dedans.


    Citation Envoyé par Celira Voir le message
    il faudrait nous donner les structures des tables, histoire qu'on sache où se trouve quoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     --
    -- Structure de la table `galerie_photos`
    --
     
    CREATE TABLE IF NOT EXISTS `galerie_photos` (
      `id_photo` int(11) NOT NULL AUTO_INCREMENT,
      `album_id` int(11) NOT NULL,
      `legende` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `fichier` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_photo`),
      KEY `album_id` (`album_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
     
    --
    -- Contenu de la table `galerie_photos`
    --
     
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `types_tourisme`
    --
     
    CREATE TABLE IF NOT EXISTS `types_tourisme` (
      `id_tourisme` int(11) NOT NULL AUTO_INCREMENT,
      `libelle_tourisme` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `contenu_tourisme` text COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_tourisme`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;
     
    --
    -- Contenu de la table `types_tourisme`
    --
     
    INSERT INTO `types_tourisme` (`id_tourisme`, `libelle_tourisme`, `contenu_tourisme`) VALUES
    (1, 'Ecotourisme', ''),
    (2, 'Tourisme réligieux', ''),
    (3, 'Tourisme culturel', ''),
    (4, 'Tourisme d''affaire', ''),
    (5, 'Tourisme d''agrément', ''),
    (6, 'Tourisme balnéaire', ''),
    (7, 'Tourisme cynégétique', ''),
    (8, 'Safari', '');
     
    --
    -- Contraintes pour les tables exportées
    --
     
    --
    -- Contraintes pour la table `galerie_photos`
    --
    ALTER TABLE `galerie_photos`
      ADD CONSTRAINT `galerie_photos_ibfk_1` FOREIGN KEY (`album_id`) REFERENCES `types_tourisme` (`id_tourisme`) ON DELETE CASCADE ON UPDATE CASCADE;
    Merci d'avance...

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bizarre, ça devrait fonctionner... Juste pour le test, tu peux ajouter la colonne groupante dans la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT gp.album_id, t.libelle_tourisme AS libelle_album, COUNT(gp.id_photo) AS nb_photos 
    FROM types_tourisme t
    LEFT JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY gp.album_id
    ORDER BY t.libelle_tourisme

    Tu exécutes cette requête directement en base via PhpMyadmin ou un autre outil du genre ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Celira Voir le message
    Tu exécutes cette requête directement en base via PhpMyadmin ou un autre outil du genre ?
    PhpMyadmin et SQL Buddy

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ben là...
    J'ai testé une requête semblable dans une de mes bases et j'ai bien une ligne à chaque fois (quitte à avoir 0 pour le count...) Donc à moins que tu n'ais qu'une seule ligne dans ta table types_tourisme, ce qui n'est a priori pas le cas, je ne vois pas d'explication...

    Si quelqu'un d'autre a une idée, qu'il n'hésite pas
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    C'est moi ou il manque une colonne dans la clause GROUP-BY (disons gp.album_id ) ?

    Tatayo.

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Bonjour,
    C'est moi ou il manque une colonne dans la clause GROUP-BY (disons gp.album_id ) ?

    Tatayo.
    Tout a fait daccord...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    e souhaite à coté de chaque libelle_album, le nombre de photos associées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t.libelle_tourisme AS libelle_album, 
    	COUNT(gp.id) AS nb_photos
    FROM types_tourisme t
    LEFT OUTER JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY t.libelle_tourisme
    ORDER BY t.libelle_tourisme
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t.libelle_tourisme AS libelle_album, 
    	COUNT(gp.id) AS nb_photos
    FROM types_tourisme t
    LEFT OUTER JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY t.libelle_tourisme
    ORDER BY t.libelle_tourisme
    Exact GRAND MAITRE !
    Mais quelle différence entre LEFT OUTER JOIN et LEFT JOIN car c'était là le problème.

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Y-en a pas et le problème ne venait pas de là.

    Mais plutôt de votre clause GROUP BY mal écrite par rapport à votre SELECT

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    Y-en a pas et le problème ne venait pas de là.

    Mais plutôt de votre clause GROUP BY mal écrite par rapport à votre SELECT
    Exact, avec ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT t.libelle_tourisme AS libelle_album, COUNT(gp.id_photo) AS nb_photos 
    FROM types_tourisme t
    LEFT JOIN galerie_photos gp ON gp.album_id = t.id_tourisme
    GROUP BY t.libelle_tourisme
    ORDER BY t.libelle_tourisme
    Ce forum, Dieu du ciel !

    Merci à vous tous.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/02/2014, 17h07
  2. group by sur une seule ligne
    Par roland34 dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/01/2012, 16h03
  3. Récupérer une seule ligne par groupe
    Par David55 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 30/12/2010, 19h59
  4. Comment n'afficher qu'une seule ligne par sous-groupe
    Par mondaying dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2010, 23h25
  5. [debutant]Récupération d'une seule ligne d'un groupe
    Par iza76 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/01/2008, 09h25

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