[SQL] Transformer une jointure en liste (GROUP BY ?)

Transformer une jointure en liste (GROUP BY ?) [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-02-2006 à 17:45:20    

SELECT I.identite, M.intitule
FROM intervenants I, intervenants_modules IM, modules M
WHERE I.numero = IM.numero_intervenant AND M.numero = IM.numero_module
 
Intervenants -> numero
                identite
Modules -> numero
           intitule
Intervenants_modules -> numero_intervenant
                        numero_module


 
Le problème c'est qu'au final j'ai :
Intervenant 1 - Module 1
Intervenant 1 - Module 2
Intervenant 1 - Module 3
...
 
Et que je voudrais transformer ça en liste :
Intervenant 1 - (Module 1, Module 2, Module 3)
 
Si c'est possible ?
 
Merci d'avance.

Reply

Marsh Posté le 18-02-2006 à 17:45:20   

Reply

Marsh Posté le 18-02-2006 à 17:48:18    

bah comme tu le dis c'est avec un group by sur intervenant
T'as essayé ?

Reply

Marsh Posté le 18-02-2006 à 18:27:26    

Sebou77 a écrit :

bah comme tu le dis c'est avec un group by sur intervenant
T'as essayé ?


 
Si je fais un GROUP BY (I.identite) ça donne
Intervenant 1 - Module 1
Intervenant 2 - ...
...
 
Ca ne donne pas une liste, en tout cas ça n'en donne pas une avec MySQL.

Reply

Marsh Posté le 20-02-2006 à 11:22:28    

Si c'est juste une histoire de présentation des résultats (colonne vers liste), inutile de chercher. Les bases de données font de l'extraction, pas de la mise en forme.

Reply

Marsh Posté le 20-02-2006 à 11:26:02    

Sebou77 a écrit :

bah comme tu le dis c'est avec un group by sur intervenant
T'as essayé ?


 
euh non, pas du tout.[:dawa]
Suivant les SGBD tu risques même de te faire insulter, à faire ça.[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-02-2006 à 11:27:03    

jeoff a écrit :

Si c'est juste une histoire de présentation des résultats (colonne vers liste), inutile de chercher. Les bases de données font de l'extraction, pas de la mise en forme.


 
pluzun. Le SGBD te permet de récupérer des données, à toi de traiter ce qu'il te file pour l'afficher comme tu le souhaites.[:dawao]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-02-2006 à 12:17:08    

Dost67 a écrit :

SELECT I.identite, M.intitule
FROM intervenants I, intervenants_modules IM, modules M
WHERE I.numero = IM.numero_intervenant AND M.numero = IM.numero_module
 
Intervenants -> numero
                identite
Modules -> numero
           intitule
Intervenants_modules -> numero_intervenant
                        numero_module


 
Le problème c'est qu'au final j'ai :
Intervenant 1 - Module 1
Intervenant 1 - Module 2
Intervenant 1 - Module 3
...
 
Et que je voudrais transformer ça en liste :
Intervenant 1 - (Module 1, Module 2, Module 3)
 
Si c'est possible ?
 
Merci d'avance.


 
 
tu ne peux pas. C'est du post-traitement. Donc tu ordonnes ton resultat par intervenant, et en parcourant les resultats tu créés ta liste de module. A chaque changement d'intervenant tu repars sur une nouvelle liste de modules.


---------------
MZP est de retour
Reply

Marsh Posté le 20-02-2006 à 19:46:28    

OK, comme ça c'est clair. Donc si je veux une liste en sortie il faut que je stocke des listes dans la base de données ou alors que je transforme ces infos en liste avec du PHP par exemple.

Reply

Marsh Posté le 20-02-2006 à 21:00:18    

Quel SGBD ?
Avec MySQL, il y a la fonction "GROUP_CONCAT" qui permet de faire ca :)

Reply

Marsh Posté le 21-02-2006 à 13:35:28    

mrbebert a écrit :

Quel SGBD ?
Avec MySQL, il y a la fonction "GROUP_CONCAT" qui permet de faire ca :)


 
Je l'ai fait avec MySQL mais c'est un exo pour l'école et là bas on utilise DB2.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed