我想看看在哪里可以改进我的查询,以获得用户的所有朋友。我最初想在每次添加时插入2行,以便运行
SELECT *
FROM friends
WHERE friends.requesterId={id};
这种方法的问题是N^(N-1(的结果,因为我要加倍插入。我希望使用加入或联合,但我可能理解不正确。我试过做
SELECT *
FROM "friends"
WHERE "requesterId"=2
UNION
SELECT *
FROM "friends"
WHERE "receiverId"=2
这导致了一个问题,其中一行变成
id | 请求者id | 接收方id | 状态|
---|---|---|---|
7 | 2 | 4"接受"> | |
1 | 1 | 2 | ";接受"> |
6 | 2 | 3"接受"> |
只是不要包括已经知道值的列("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
使用计算资源来检查和删除重复项。在这种情况下,这将是一种资源。