我有一张 table :
| friendID | friendA | friendB | relation |
-------------------------------------------
1 2 4 1
2 3 4 1
3 4 8 2
4 4 9 1
我想运行一个查询,因为我可以检索不是当前登录用户的 friend 列表,例如,如果我以用户 4 身份登录,我希望得到用户 2、3、 8 和 9。
目前我在一个查询中拉回了 friendA 或 friendB 中 ID 为 4 的用户列表:
SELECT forename, surname
FROM entity
LEFT JOIN friends
ON entity.fb_id = friends.friendA
WHERE friendA = :entity_id
OR friendB = :entity_id
UNION
SELECT forename, surname
FROM entity
LEFT JOIN friends
ON entity.fb_id = friends.friendB
WHERE friendA = :entity_id
OR friendB = :entity_id
此查询将为用户拉回所有 friend ,但由于比较是使用登录用户 ID 完成的,因此我得到了该用户的重复列表,这是不正确的。
如何从列中提取 friend ID,然后获取他们每一行的信息?
最佳答案
我认为您可以简化您的查询以获得您想要的:
SELECT forename, surname
FROM entity LEFT JOIN
friends
ON entity.fb_id = friends.friendA
WHERE friendB = :entity_id
UNION
SELECT forename, surname
FROM entity LEFT JOIN
friends
ON entity.fb_id = friends.friendB
WHERE friendA = :entity_id;
WHERE
条件在other好友栏。
这是另一种写法:
SELECT e.forename, e.surname
FROM entity e
WHERE EXISTS (SELECT 1
FROM Friends f
WHERE (e.fb_id = f.friendA and f.friendB = :entity_id) OR
(e.fb_id = f.friendB and f.friendA = :entity_id)
);
关于mysql - SQL:根据当前用户获取好友列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30373874/