Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 20/03/2011, 11h11   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
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 : 707
Points : 328
Points : 328
Par défaut GROUP_CONCAT mutiple dans le CONCAT

Bonjour à tous.
J'ai 3 tables liées par des tables intermédiaires.
1.legislatures
Citation:
id_legis | annee_legis
1 2002
2 2006
2. regions
Citation:
id_region | libelle
1 Sud
2 Centre
.......
3. departements
Citation:
id_dpt | libelle
1 Brazza
2 Kinsha
...
Et les tables intermédiares :
4. regions_legislature
Citation:
id_region | id_legis
1 1
2 1
...
5. departements_region
Citation:
id_dpt | id_region
1 1
2 1
...
Et cette requete me donne un résultat inattendu
Code :
1
2
3
4
5
6
7
8
9
 
SELECT l.id_legis,
CONCAT(COUNT(rl.id_region), ' - ', GROUP_CONCAT(r.libelle ORDER BY r.libelle SEPARATOR ", " )) AS regions
FROM legislatures AS l
INNER JOIN regions_legislature AS rl ON l.id_legis = rl.id_legis
INNER JOIN regions AS r ON r.id_region = rl.id_region
INNER JOIN departements_region AS dr ON dr.id_region = rl.id_region
INNER JOIN departements AS d ON d.id_dpt = dr.id_dpt
GROUP BY rl.id_legis
Moi je veux dans un premier temps pour chaque législature, le nombre de région et la liste des régions.

Dans une deuxième temps, pour chaque région de la première requête, le nombre de départements et la liste des ces départements.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 16h14   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 997
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 : 10 997
Points : 18 256
Points : 18 256
Envoyer un message via MSN à CinePhil
Si, comme en France, un département ne peut se trouver que dans une seule région, je ne vois pas l'intérêt de la table departements_region !
Une clé étrangère dans la table departement faisant référence à l'ID de la région est suffisante.

Citation:
Moi je veux dans un premier temps pour chaque législature, le nombre de région et la liste des régions.
Il te faut donc effectivement un groupement par législature...
Citation:
Dans une deuxième temps, pour chaque région de la première requête, le nombre de départements et la liste des ces départements.
Et là il te faut un groupement par région.

Ta requête ne semble couvrir que la première partie.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 19h05   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
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 : 707
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Si, comme en France, un département ne peut se trouver que dans une seule région, je ne vois pas l'intérêt de la table departements_region !
En fait ici chez moi, les régions ont subit des éclosions et des aménagements, raison de la departements_region où un département peut se retrouver dans deux régions distinctes.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 01h43   #4
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
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 : 707
Points : 328
Points : 328
Voici un jeu de résultat que j'attends :
Citation:
id_legis | regions
1 | 2- region A(2- departement 1, departement 2), region B(1- departement 3)
Explication :
La législature 1 compte 2 régions A et B, la région compte 2 départements dep 1 et dep 2 et enfin la région B compte 1 seul departement nommé dep 3.
En regardant de près ce résultat, je suis tenté d'imbriquer un GROUP_CONCAT dans un autre. Est-ce faisable?

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 09h50   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 997
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 : 10 997
Points : 18 256
Points : 18 256
Envoyer un message via MSN à CinePhil
GROUP_CONCAT est une spécificité de MySQL qui incite à lui demander de faire autre chose que son boulot : de la cosmétique.

Ça peut encore aller lorsque les données ne sont pas trop nombreuses et avec un seul regroupement mais là tu atteint les limites de l'acceptable. Comme tu ne sais pas a priori le nombre de région qu'il y a par législature, tu ne sais pas quel est le nombre de colonnes de résultat à retourner. Et comme ce nul de MySQL ne connaît pas les fonctions analytiques, ta requête deviendrait une usine à gaz contre performante, pour autant même qu'elle soit possible !

C'est au logiciel qui interroge la BDD de présenter le résultat.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 12h13   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
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 : 707
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
...
C'est au logiciel qui interroge la BDD de présenter le résultat.
Si je comprends bien, SQL pour sélectionner les données dont j'ai besoin maintenant au langage serveur PHP par exemple pour présenter comme on souhaite?
Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 13h35   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 997
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 : 10 997
Points : 18 256
Points : 18 256
Envoyer un message via MSN à CinePhil
Oui.
Avec une requête simple, tu ramènes toutes les infos rapidement. Ensuite un code PHP les présente en gérant les ruptures dans la liste récupérée (à chaque changement de législature et de région).
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 14h47   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
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 : 707
Points : 328
Points : 328
@CinePhil : Merci pour ces éclaircis.

Salutations distinguées...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h12.


 
 
 
 
Partenaires

Hébergement Web