返回与用户连接的所有好友



我想看看在哪里可以改进我的查询,以获得用户的所有朋友。我最初想在每次添加时插入2行,以便运行

SELECT * 
FROM friends
WHERE friends.requesterId={id};

这种方法的问题是N^(N-1(的结果,因为我要加倍插入。我希望使用加入或联合,但我可能理解不正确。我试过做

SELECT * 
FROM "friends"
WHERE "requesterId"=2
UNION
SELECT * 
FROM "friends"
WHERE "receiverId"=2

这导致了一个问题,其中一行变成

状态43
id请求者id接收方id
72"接受">
112";接受">
62"接受">

只是不要包括已经知道值的列("self"值(。

SELECT id, receiverId AS friendID, 1 AS is_my_request, status
FROM friends
WHERE requesterId = 2
UNION ALL
SELECT id, requesterId AS friendID, 0 AS is_my_request, status
FROM friends
WHERE receiverId = 2

注意,我还将列名更改为仅为friendID,并添加了一列表示if";我"是否完成任务。

我还将UNION更改为UNION ALL。这是因为UNION使用计算资源来检查和删除重复项。在这种情况下,这将是一种资源。

最新更新