LoginSignup
4

More than 5 years have passed since last update.

MySQLで関連テーブルの複数行を、カンマ区切り1行にする方法を教えてください

Posted at

これは「コードを書いていて困ったときに、suinがチャットで質問に答えたり相談に乗るsuinのプログラミング相談室(仮)」で頂いた質問と僕の回答の要約です。

質問

下記図1のようなデータベースで、各articleが持ってるkeywordをカンマ区切りかつ一行で取り出す方法を教えてください。関連テーブルをJOINしてみたのですが、1行にまとめることができず複数行になってしまいます2

myapp.png

期待するアウトプットは次のようなものです:

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も調べて知りました😂)。ありがとうございます!


  1. この図は質問者ではなくsuin作です。作成方法はSequelProでER図を出力する方法 - Qiita。 

  2. suin記: 質問者が試したSQLは省略します。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4