■メンバーテーブル(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
のレコードが必要になります。
はい。要件を書くと、
2013/07/17 16:55:45・メンバーは複数のグループに所属できる
・出力時はツリー式(もしくは、スポーツ>野球 のような形)にしたい
のですが、質問した構成で複数グループに登録はできるものの、出力時・検索時は迷います。
検索は、パパトモさんの方法でもできますが、出力時はどっちが親でどっちが子のグループかわからないです。
すみません、自分でもこの構成はよく理解できていないため、もう少し考えます。回答ありがとうございます。
2013/07/17 16:56:59