2012-02-19 9 views
0

私は複雑なJOINと思われるクエリが必要です。私はお互いの「子供」の一種である3つのテーブルを持っています。一番上のテーブルは "clan_members"です。次に、clan_member idを取得する "roster_members"があります。下の1つは "match_players"で、これはroster_membersのIDを取得します。私は、clan_membersテーブルのすべての結果を取り出すループを作成しました。私は何をしたい一族のメンバーがで演奏していることを一致してどのように多くのを見つける。ここでは3つのテーブルのレイアウトです:。MySQLは3つのテーブルに結合しました

[clan_members] 
    -id 
    - member_id 
    -join_date 

[roster_members] 
    - id 
    - clan_member_id 
    - title 

[match_players] 
    - id 
    - roster_member_id 
    - match_id 

私は前に3つの異なるテーブルでのJOINをやったことがないと私は何見当がつかない誰かが私に質問を書くことができるなら、私は大いに感謝するでしょう!

+1

注文は問題ではなく、SOコミュニティはあなたが質問する前に何か試したことを実証することを好む。 –

+0

@OMGPonies:「INNER JOIN」の場合、いいえ。 LEFT JOINの場合は、はい。 –

答えて

0

このクエリは、ID 123を持つ一族のメンバーが参加していることを、あなたにマッチの数を取得します:サイドノートでは

select count(*) as match_count 
from clan_members c, roster_members r, match_players m 
where c.member_id = r.clan_member_id 
and r.id = m.roster_member_id 
and c.id = 123 

、一貫して、あなたの列に名前を付けることをお勧めだろう。たとえば、clan_member_idを持つすべての列に同じ名前を付ける必要があります。 clan_membersテーブルではidという名前が付けられていますが、roster_membersテーブルにはclan_member_idという名前が付けられています。テーブルの結合方法を理解しやすくするだけです。

0
SELECT DISTINCT match_id 
    FROM clan_members 
    INNER JOIN roster_members 
     ON clan_members.id = roster_members.clan_member_id 
    INNER JOIN match_players 
     ON roster_members.id = match_players.roster_member_id; 

は、すべての3つのテーブルが結合されているときに、固有の#match_idを取得します。

関連する問題