Concaténer après une jointure

Résolu/Fermé
franquis Messages postés 18 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 20 mars 2011 - 25 oct. 2010 à 14:05
franquis Messages postés 18 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 20 mars 2011 - 25 oct. 2010 à 14:34
Bonjour à tous,

J'ai deux tables posts et comments qui ont la forme:

posts (post_id,foo,bar,..)
comments (comment_id, post_id,user_id, comment, date)


La requête suivante affiche les posts et s'ils existent, les commentaires associés sur des enregistrements distincts.

Par exemple,

post_id | ... | comment_id | user_id | comment
1 | ... | 1 | 25 | toto
1 | ... | 2 | 25 | tata
1 | ... | 3 | 5 | zoé
2 | ... | NULL | NULL | NULL



 SELECT * FROM posts p LEFT OUTER JOIN comments c ON  p.post_id = c.post_id



J'aimerais modifier cette requête pour avoir tous les commentaires d'un post concaténés dans un champ commentaires sous une forme quelconque (par exemple "commentaire1";"commentaire2") du genre:

post_id | ... | commentaires
1 | ... | toto;tata;zoé
2 | ... | NULL



Auriez-vous une direction vers laquelle m'orienter ou alors la solution tout simplement ^^

Merci à vous.

2 réponses

franquis Messages postés 18 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 20 mars 2011 2
25 oct. 2010 à 14:34
J'ai demandé de l'aide un peu trop vite semble t'il, car j'ai réussi à trouver mon bonheur :-)

Pour la postérité, voici la solution:
SELECT p.*, GROUP_CONCAT(p.comment_id,'-',p.user_id,'-',p.comment SEPARATOR ';') AS commentaires 
FROM posts p
LEFT OUTER JOIN comments c ON p.post_id = c.post_id
GROUP BY p.post_id


//posts (post_id,foo,bar,..)
//comments (comment_id, post_id,user_id, comment, date)


On obtient:

post_id | commentaires
1 | 1-2-toto;2-5-tata;4-20-zoé
2 | NULL
2
franquis Messages postés 18 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 20 mars 2011 2
25 oct. 2010 à 14:09
Je me permet de préciser que j'utilise MySQL :-) et que cette requête devra être utilisée en tant que view (donc pas de PHP :) )
0