■メンバーテーブル(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
のレコードが必要になります。
グループ名テーブル
グループメンバーテーブルと 二つに 分けたほうが いいんじゃない?