2012-10-24 57 views
1

的許多限制,我有3個表許多一側

user 
id | etc | 

game 
id | etc 

user_game 
user_id | game_id 

我想創建一個情況n用戶無法創建另一個遊戲當且僅當他們已經擁有了這些n用戶之間的遊戲。例如,假設我們有user_ids: 1,2,他們都在玩game_id 1,他們不能在他們之間創建另一個遊戲,但是如果user_id 3加入遊戲,他們可以創建一個新遊戲。

是否有可能查詢這樣的事情,如果是這樣的話 - 我該怎麼辦?嘗試玩查詢,加入,選擇和哪裏的太久:)

編輯:最終結果應該是,我查詢severel用戶,並看看他們是否可以一起玩(即沒有記錄是發現那些n的用戶在一起玩)。

+0

你想要什麼結果?在我的理解中,你想要顯示一對兼容的用戶列表,即誰不在一起玩;這樣對嗎? –

+0

我認爲你需要另外一張桌子將2個或更多用戶關聯到一個遊戲 – jcho360

+0

我認爲這個邏輯屬於應用程序而不是db。因此,您可以檢索與特定用戶兼容的用戶列表,但無法檢索多個用戶的所有資格 –

回答

0

假設您有一個包含建議用戶列表的表。我會稱之爲ProposedUsers。你可以做到以下幾點發現有這些用戶的任何game_id:

select game_id 
from user_game ug join 
    ProposedUsers pu 
    on ug.user_id = pu.user_id 
group by game_id 
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers) 

你的問題是有點不清楚的比賽進行到現有的遊戲是否準確(對遊戲沒有其他用戶)或沒有。以上處理子集情況。完全匹配的是:

select game_id 
from user_game ug left outer join 
    ProposedUsers pu 
    on ug.user_id = pu.user_id 
group by game_id 
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers)