大家好我有这个表结构
id | u_id2 | u_id2
1 | 8 | 10
2 | 10 | 1
3 | 9 | 8
4 | 1 | 8
使用此sql查询,它尝试将每个朋友的关系与8作为user_id
SELECT
u.id
FROM up2_users u
RIGHT JOIN up2_friends f
ON u.id = f.u_id1
WHERE f.u_id1 = :user_id OR f.u_id2 = :user_id
结果有点好但不完全正确。 :user_id = 8
8,9,1
你在上表中看到8是:user_id,它应该从f.u_id2返回10而不是8
但如果我输入
ON u.id = f.u_id1 AND u.id = f.u_id2
我将所有结果加倍并且8s
无论如何要在一个查询中完成我需要的东西吗?
正确的回报应该是10,9,1
答案 0 :(得分:2)
此查询不需要join
。您确实希望有条件地返回其他用户ID,因此请使用case
:
SELECT (case when f.u_id1 = :user_id then f.u_id2 else f.u_uid1 end) as id
FROM up2_friends f
WHERE f.u_id1 = :user_id OR f.u_id2 = :user_id;
如果您不想要重复,请使用select distinct
。
答案 1 :(得分:0)
@Konter根据您最近对Gordon建议的评论,您可能正在寻找类似
的内容SELECT
u.id
, Friendship.friend2 friend
FROM up2_users u
JOIN (SELECT u_id1 friend1, u_id2 friend2 FROM Friend
UNION ALL
SELECT u_id2, u_id1 FROM Friend) Friendship
ON u.id = Friendship.friend1
WHERE u.id = 8
ORDER BY friend1, friend2
;
答案 2 :(得分:0)
这适用于用户名
SELECT (case when f.u_id1 = :user_id then f.u_id2 else f.u_id1 end) as id,
u.username
FROM up2_friends f
RIGHT JOIN up2_users u
ON u.id=f.u_id1
WHERE f.u_id1 = :user_id OR f.u_id2 = :user_id
ORDER BY u.username;