我有一张表(见下文),其中包含 friend 列表。在每一行中,用户可以是发送者或接收者(请求者/被请求者)。然后状态会跟踪他们的关系(状态为 1 表示他们是 friend )。但是因为 uid 可以在发送者或接收者中,这让我很困惑。
================================
| sender | reciever | status |
--------------------------------
| testusr1 | testusr2 | 1 |
| testusr1 | testusr3 | 1 |
| testusr1 | testusr4 | 0 |
| testusr1 | testusr5 | 1 |
| testusr3 | testusr4 | 1 |
| testusr3 | testusr2 | 1 |
| testusr5 | testusr3 | 1 |
所以在上面的例子中,testusr1的好友是:testusr2、testusr3、testusr5。 testusr3的好友是:testusr5、testusr4、testusr2、testusr1
我正在寻找的是一个将获得共同 friend 的查询:testusr2 和 testusr5
从我在这里得到的另一个答案中寻找答案,我想我可以做一个联合,但我失去了我在中途遵循的逻辑......
SELECT f.uid
FROM(
(SELECT reciever as uid FROM friends where status=1 and sender='$sentuid')
UNION
(SELECT sender as uid FROM friends where status=1 and reciever='$sentuid')
) f
WHERE ...
任何帮助将不胜感激......
最佳答案
尝试类似 - (edited)
SELECT f.uid
FROM (
SELECT f1.reciever as uid FROM friends f1
WHERE f1.sender = USER1 AND f1.status = 1
UNION
SELECT f2.sender as uid FROM friends f2
WHERE f2.reciever = USER1 AND f2.status = 1
) f
WHERE f.uid IN (
SELECT f3.reciever as uid FROM friends f3
WHERE f3.sender = USER3 AND f3.status = 1 AND f3.reciever != USER1
UNION
SELECT f4.sender as uid FROM friends f4
WHERE f4.reciever = USER3 AND f4.status = 1 AND f4.sender != USER1
);
将 USER1
和 USER3
替换为您想要找到共同 friend 的 2 个用户 ID
sqlfiddle 示例 - http://sqlfiddle.com/#!2/b0aaf4/8
关于mysql - 查找常见的匹配 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307259/