|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 595 ![]() |
Bonjour,
Je bloque sur une requête qui ferait intervenir une jointure et de la concaténation, mais je ne suis pas sûr que ce soit faisable. J'ai 2 tables, elements et map_element. Code :
map_element est donc la table de correspondance où l'on peut trouver plusieurs fois le même id_element (mais chaque id_externe est unique). Ce que je voudrais c'est récupèrer toutes les lignes et les champs de la table elements puis faire une jointure sur la table map_element qui rajouterait dans le résultat un champ (map_ids par ex) qui contiendrait tous les id_externe relatifs à chaque élément, le tout séparé par un point virgule (ex: 45;9;63;87;5). Est ce que c'est faisable ? Merci d'avance pour votre aide. |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Oui, en utilisant une jointure externe et CONCAT.
__________________
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 ! |
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 595 ![]() |
Merci pour l'info.
J'en suis donc arrivé à cette requête: Code :
SELECT e.*, CONCAT_WS(";",m.id_externe) AS map_ids FROM elements AS e LEFT OUTER JOIN map_element AS m ON e.id = m.id_element Ce que je voudrais c'est avoir une seule ligne pour chaque id_element avec tous les id_externe dans le champ map_ids (séparés par un point virgule). Comment faire ? |
|
|
00
|
|
|
#4 |
![]() ![]() |
CONCAT s'utilise avec un GROUP BY
__________________
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 ! |
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 595 ![]() |
Merci, mais je n'arrive pas à voir où placer GROUP BY dans ma requête.
Une idée ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
De fait ici, GROUP_CONCAT, correspond davantage à ce que tu veux faire. Quand au GROUP BY il faut qu'il porte sur la colonne pivot, à savoir, apparemment, la colonne elements.id, si j'ai bien compris la logique qui lie ces deux tables.
__________________
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) |
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
C'est effectivement GROUP_CONCAT qui convient !
__________________
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 ! |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 595 ![]() |
Merci à tous les deux.
![]() En effet c'était bien GROUP_CONCAT couplé avec GROUP BY. La requête donne maintenant: Code :
SELECT e.*, GROUP_CONCAT(m.id_externe) AS map_ids FROM elements AS e LEFT OUTER JOIN map_element AS m ON e.id = m.id_element GROUP BY e.id |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com