SQL:根据当前用户获取好友栏的值
SQL: Get the value of friend column based on current user
我有一个 table:
| friendID | friendA | friendB | relation |
-------------------------------------------
1 2 4 1
2 3 4 1
3 4 8 2
4 4 9 1
我想要 运行 一个查询,因为我可以检索不是当前登录用户的朋友列表,例如,如果我以用户 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
此查询将为该用户拉回所有好友,但因为比较是使用登录用户 ID 完成的,所以我得到该用户的重复列表,但这是不正确的。
如何从列中提取朋友 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
条件在其他好友栏
这是另一种写法:
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)
);
在查询的两个部分中,您都使用 OR 来询问:"give me the user or his/her friend"。删除 OR 子句以便仅获取朋友,仅此而已。但是,这样的查询可以写得更简单、更易读:
select forename, surname
from entity
where fb_id in
(
select friendA from friends where friendB = :entity_id
union all
select friendB from friends where friendA = :entity_id
);
我有一个 table:
| friendID | friendA | friendB | relation |
-------------------------------------------
1 2 4 1
2 3 4 1
3 4 8 2
4 4 9 1
我想要 运行 一个查询,因为我可以检索不是当前登录用户的朋友列表,例如,如果我以用户 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
此查询将为该用户拉回所有好友,但因为比较是使用登录用户 ID 完成的,所以我得到该用户的重复列表,但这是不正确的。
如何从列中提取朋友 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
条件在其他好友栏
这是另一种写法:
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)
);
在查询的两个部分中,您都使用 OR 来询问:"give me the user or his/her friend"。删除 OR 子句以便仅获取朋友,仅此而已。但是,这样的查询可以写得更简单、更易读:
select forename, surname
from entity
where fb_id in
(
select friendA from friends where friendB = :entity_id
union all
select friendB from friends where friendA = :entity_id
);