質問: MySQLでSQL文の書き方について相談です。テーブル構成は以下のようになります。 ■メンバーテーブル(members) カラム:id,name レコード:1,山田 2,佐藤 ■グループテーブル(groups) カラム:id,name,parent_id レコード:1,スポーツ,0 2,野球,1 3,パソコン,0 ■メンバーとグループのリレーション(member_groups) カラム:id,members_id,groups_id レコード:1,1,2 こういうテーブル構成・登録レコードになっているとします。 上記はリレーション構成で、「メンバーが複数グループに所属できる」設計になります。 そこで質問ですが、 ・メンバー一覧から、グループを「野球」で検索したら、メンバーの「山田」が表示される。 ・メンバー一覧から、グループを「スポーツ」で検索したら、メンバーの「山田」が表示される。 としたいのですが、グループ内が親子関係になっているので、どういうSQL文を書けばいいかわかりません。 ご存知のかたは、SQL文のアドバイスをお願いします。
回答: member_groupsテーブルを中間に置いてJOINすればできると思います。 ↓こんな感じです。 SELECT * FROM members INNER JOIN (member_groups INNER JOIN groups ON members.id = member_groups.menbers_id) ON member_groups.groups_id = groups.id WHERE groups.name = '野球' SELECT * FROM members INNER JOIN (member_groups INNER JOIN groups ON members.id = member_groups.menbers_id) ON member_groups.groups_id = groups.id WHERE groups.name = 'スポーツ' この場合、member_groupsテーブルのレコードは・・・ 1,1,2 2,1,1 のレコードが必要になります。