我有一个包含不同字段的用户表:id,firstname,name。 我有一个名为friend的表,其中包含不同的字段:invite_id,friend_sender(用户的id),friend_receiver(用户的id),validity(boolean)。
我正在用
填充好友表1, 1, 2, 0;
2, 3, 1, 1;
3, 1, 5, 1;
让我们想象一下我是用户1,我想找到我所有的朋友。我可以是发送朋友邀请(发件人)或收件人(收件人)的人。当接收者接受邀请时,关系的有效性设置为1.例如,我不是用户2的朋友,因为他没有接受。
我应该通过用户1进行查询得到的结果是:
3, firstnameofuser3, nameofuser3
5, firstnameofuser3, nameofuser3
我尝试了一些SQL东西,使用双JOIN,重命名表以避免“双相同表”问题......但我无法弄明白。
我发现了一些关于它的帖子,但对于更复杂的事情,比如这里: Finding mutual friend sql
提前感谢您的帮助。
答案 0 :(得分:1)
我知道已有答案,但我的独特之处我有一个小提琴! ;)
SELECT
id,
firstname,
name
FROM
user
WHERE id IN
(
SELECT
CASE WHEN friend_sender = 1 THEN friend_receiver ELSE friend_sender END
FROM friend
WHERE
(friend_sender = 1 OR friend_receiver = 1)
AND
validity = 1
)
答案 1 :(得分:0)
试试这个:
SELECT u.*
FROM user u
WHERE u.id IN (
SELECT f.friend_sender
FROM friend f
WHERE f.friend_receiver = 2 -- My fixed ID about Jin Jey
UNION
SELECT f.friend_receiver
FROM friend f
WHERE f.friend_sender = 2 AND f.validity = 1)
我使用了UNION,因为你可以查询两组数据并合并它。
我修正了ID(2),因为在您的请求中,您想要了解所有关于Jin Jey的朋友
答案 2 :(得分:0)
您可以尝试以下查询
select
id,
firstname,
name
from
user inner join friend
on
(friend_sender=1 or friend_receiver=1 )and validity=1
and
user.id=
(case
when friend_sender=1 then friend_receiver
else friend_sender
end)