2011-03-31 27 views
0

好的,這是一個有點棘手的解釋,但可以很容易實現。在MySQL中選擇匹配/相互記錄

我有以下結構的表:

`match_id` int(69) NOT NULL auto_increment, 
`event_id` int(6) NOT NULL, 
`users_id` int(6) NOT NULL, 
`matches` int(6) default NULL 

所以這裏是數據的樣本

33  11  54  1221 
32  11  54  21 
31  11  21  54 
30  11  43  54 

所以,在英語,這是需要採取什麼措施: 據一個個人選擇圖表,user1選擇user2,反之亦然。我只需要USERS_ID他們相互選擇。 如果我正在尋找匹配= 54,我需要得到users_id = 21。因爲54匹配21和21匹配54.

有關如何爲此編寫SQL語句的任何想法? 非常感謝。 布魯諾。

回答

2

試試這個:

SELECT DISTINCT a.user_id 
    FROM <YOUR_TABLE> a INNER JOIN <YOUR_TABLE> b 
    ON a.matches = b.users_id 
    AND b.matches = a.users_id 
WHERE a.matches = 54 
+0

多謝你們。所有解決方案都很棒! – Bruno 2011-03-31 20:04:12

0
SELECT `tn1`.`users_id` from `TableName` `tn1` 
JOIN `TableName` `tn2` ON `tn1`.`matches` = `tn2`.`users_id` 
AND `tn2`.`users_id` = `tn1`.`matches` 

其中表名 - 你的表

1
select u1.user_id, u2.user_id 
from t u1, z u2 
where u1.matches = u2.user_id and u2.matches = u1.user_id 

的名字,你仍然會得到2行54,21和21,54