我正在制作一个网络约会应用,该应用需要匹配用户并让他们彼此聊天。
我想弄清楚如何查找特定用户的所有匹配项。
现在我有一个名为follow的表,该表具有2列。
UserID | MatchUserID
--------------------
1 | 2
2 | 1
1 | 3
1 | 4
1 | 5
4 | 1
5 | 4
想法是要使两个用户匹配,他们需要彼此关注。上表显示了哪个用户关注哪个用户。
假定当前登录的用户是UserID = 1。 我需要一个查询,该查询将从MatchUserID表返回以下结果:
2,4
从某种意义上说,我正在寻找两列之间所有相反的组合。
这是我用来创建表格的代码。
CREATE TABLE Match
(
UserID INT NOT NULL,
MatchUserID INT NOT NULL,
PRIMARY KEY (UserID, MatchUserID)
);
答案 0 :(得分:2)
最简单的方法可能是使用EXISTS
和相关的子查询来搜索其他匹配项。
SELECT t1.matchuserid
FROM elbat t1
WHERE t1.userid = 1
AND EXISTS (SELECT *
FROM elbat t2
WHERE t2.matchuserid = t1.userid
AND t2.userid = t1.matchuserid);
答案 1 :(得分:2)
您可以通过自我加入来实现:
select m.MatchUserID
from `Match` m inner join `Match` mm
on mm.MatchUserID = m.UserId
where
m.UserId = 1
and
m.MatchUserID = mm.UserId
请参见demo。
结果:
| MatchUserID |
| ----------- |
| 2 |
| 4 |