Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 13h44   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Par défaut Group by et count : une seule ligne renvoyée

Bonjour,
J'ai cette requête,
Code :
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...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 16h01   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 664
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 664
Points : 5 390
Points : 5 390
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 :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 12h22   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Code :
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
Citation:
libelle_album nb_photos
Ecotourisme 0
Je ne vois pas les autres libellés.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 12h29   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 12h40   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 664
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 664
Points : 5 390
Points : 5 390
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 13h29   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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.
Citation:
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 :
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...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 16h25   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 664
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 664
Points : 5 390
Points : 5 390
Bizarre, ça devrait fonctionner... Juste pour le test, tu peux ajouter la colonne groupante dans la requête :
Code sql :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 16h38   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 16h55   #9
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 664
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 664
Points : 5 390
Points : 5 390
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 17h12   #10
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 922
Points : 1 922
Bonjour,
C'est moi ou il manque une colonne dans la clause GROUP-BY (disons gp.album_id ) ?

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 08h12   #11
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 10h03   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
e souhaite à coté de chaque libelle_album, le nombre de photos associées.
Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 11h28   #13
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Code :
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.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 11h41   #14
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 650
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 650
Points : 2 648
Points : 2 648
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
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 11h55   #15
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
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 :
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.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h08.


 
 
 
 
Partenaires

Hébergement Web