2011-06-24 111 views
0

記錄我有以下結構,用來在約會事件相匹配的人的數據庫表:獲取匹配從MySQL查詢

ID | EVENT | USERS_ID | MATCH_ID | GENDER 
1 | 27 | 54 | 1245 | Female 
2 | 27 | 54 | 21 | Female 
3 | 27 | 21 | 45 | Male 
4 | 27 | 21 | 54 | Male 

我想寫我的查詢,這將使我我的比賽。 例如,從上面的數據中,用戶54匹配用戶21,因爲54選21和21選54.

我需要將USER_ID和EVENT作爲輸入並獲取匹配該用戶的MATCH_ID列表。 所以,

SELECT match_id FROM……. WHERE users_id = 54 AND event = 27 

我還需要了解哪些用戶沒有得到任何比賽。這將是一個單獨的查詢。從上面的例子中,用戶45沒有相互匹配。

我一直在與這個戰鬥一段時間。任何想法都會很棒。

謝謝。

回答

2

沒有測試,但我認爲這應該爲你做:

SELECT t2.users_id FROM 
tbl t1 
INNER JOIN tbl t2 
ON t1.users_id = t2.match_id AND t1.match_id = t2.users_id 
WHERE t2.event = 27 
AND t1.users_id = 54; 

此外,尋找所有用戶沒有任何比賽誰,這可能會工作:

SELECT t1.match_id 
FROM 
tbl t1 
LEFT JOIN 
tbl t2 
ON t1.match_id = t2.users_id 
WHERE t2.id IS NULL; 

雖然這裏的一般原則是將表加入自己,並找到匹配的方式。

編輯:做了一些更正,感覺很有信心,這應該適合你。

編輯2:這是最後的更正,我相信應該把這一切都拉到你身邊。

SELECT * FROM event_matches T1 INNER JOIN event_matches T2 ON t1.users_id = t2.matches AND t1.matches = t2.users_id AND t1.event_id = t2.event_id WHERE t2.event_id = 45 和T1 .users_id = 1239;

+0

感謝您的代碼。它幾乎在那裏,但更多的用戶會發生一些奇怪的事情: – Bruno

+0

也許編輯帖子?也許我可以進一步幫助。 – user470714

+0

感謝您的代碼。它幾乎在那裏,但是當你搜索一個沒有選擇的用戶時會發生一些奇怪的事情。在我上面的數據集中,如果您搜索users_id = 1245的匹配項,它會接收其他用戶。我在主SELECT上添加了DISTINCT。 – Bruno