前提・実現したいこと
MySQLでのSQL文について悩んでいます。
やりたい事としましては、メインとなるリスト(記事データのようなもの)がありまして、
その1データ毎に複数のタグのようなものを紐づけたい、という感じです。
ブログの記事とその記事にタグが複数あるような形と同じようなものになります。
テーブル、カラムは以下のような形となっております。
リスト用テーブルのカラム(list) list_id | list_name タグ名用テーブルのカラム(tag) tag_id | tag_name リストとタグの紐づけ用テーブルのカラム(tag_map) tag_map_id | list_id | tag_id
上記のような構成のテーブルで、以下のようなSQLでJOINしております。
SQL
1SELECT * FROM `list` 2LEFT OUTER JOIN `tag_map` ON list.list_id = tag_map.list_id 3LEFT OUTER JOIN `tag` ON tag_map.tag_id = tag.tag_id 4ORDER BY list.list_id DESC
このようなSQLから対象データを取得後、
それをPHP内でループする形で
リスト名1 | 紐づくタグ名、紐づくタグ名、紐づくタグ名…(タグ名は複数)
リスト名2 | 紐づくタグ名、紐づくタグ名、紐づくタグ名…(タグ名は複数)
リスト名3 | 紐づくタグ名、紐づくタグ名、紐づくタグ名…(タグ名は複数)
…
のような一覧化をしたいのですが、上記SQLで行いますと、
リスト数 x 紐づくタグ数
の数のデータ数になりますので、増えるほどかなり肥大化する為非効率だと思うのですが、
こちらをSQL文だけでリスト数のデータのみで紐づくタグ名はまとめて取得するような書き方はありませんでしょうか…?
例) listテーブル list_id | list_name 1 | リスト1 2 | リスト2 tagテーブル tag_id | tag_name 1 | タグ1 2 | タグ2 3 | タグ3 tag_mapテーブル tag_map_id | list_id | tag_id 1 | 1 | 1 2 | 2 | 2 3 | 2 | 3
結果) リスト1 | タグ1 リスト2 | タグ2 リスト2 | タグ3 となるところを… リスト1 | タグ1 リスト2 | タグ2,タグ3 のような形に取得出来ないか…と思っております。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/27 03:18