これは「コードを書いていて困ったときに、suinがチャットで質問に答えたり相談に乗るsuinのプログラミング相談室(仮)」で頂いた質問と僕の回答の要約です。
質問
下記図1のようなデータベースで、各article
が持ってるkeyword
をカンマ区切りかつ一行で取り出す方法を教えてください。関連テーブルをJOIN
してみたのですが、1行にまとめることができず複数行になってしまいます2。
期待するアウトプットは次のようなものです:
articles.title | keywords.name |
---|---|
article1 | keyword1,keyword2,keyword3 |
article2 | keyword1,keyword2 |
article3 | keyword1,keyword2,keyword3 |
suinの回答
MySQLではGROUP_CONCAT
関数でカンマ区切り1行にできます。
SELECT articles.title, GROUP_CONCAT(keywords.name) AS keywords FROM articles
LEFT JOIN article_keywords
ON articles.id = article_keywords.article_id
LEFT JOIN keywords
ON keywords.id = article_keywords.keyword_id
GROUP BY articles.id
;
回答に対して頂いた反応
GROUP_CONCAT関数は知りませんでした!(suinも調べて知りました😂)。ありがとうございます!
-
この図は質問者ではなくsuin作です。作成方法はSequelProでER図を出力する方法 - Qiita。 ↩
-
suin記: 質問者が試したSQLは省略します。 ↩