mysql - SQL:根据当前用户获取好友列的值

标签 mysql sql subquery

我有一张 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/

相关文章:

mysql - React项目的免费服务器选择

MySQL 更新多行中 1 列的部分内容

mysql - mysql中的子查询计数

mysql - mysql中的更新语句

mysql - 2 属性引用相同的事物,但它们应该具有唯一的值

mysql 查询 : find if at least one number 2 is in a set of fields

sql - SQL Server 2008中如何描述表?

mysql - MySQL Count子查询

python - 如何搜索段落中的对象

mysql - 这个SQL代码有什么问题