【发布时间】:2021-08-21 17:25:16
【问题描述】:
我正在尝试从具有架构的表中获取所有待处理的好友请求:
| id | user_id | friend_id |
|---|
待处理的请求只是一行,例如:
(意思是用户1向用户2发送了请求)
| id | user_id | friend_id |
|---|---|---|
| 1 | 1 | 2 |
当被接受时,它变成两行,我可以加入这个表中的两个来找到所有接受的(这工作得很好)。
已接受的参考请求:
| id | user_id | friend_id |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 1 |
我接受的查询如下所示(我使用的是 bookshelf js 和 knex.js):
const friends = new Friends();
return friends.query((qb) => {
qb.select('friends.user_id', 'friends.friend_id');
qb.join('friends as friendsTwo', 'friends.user_id', 'friendsTwo.friend_id');
qb.where('friends.user_id', '=', id);
}).fetchAll();
如何修改它以仅获得单向关系? 我的第一个想法是 leftJoin,但我似乎无法让它工作,所以如果有人知道答案或看到了一个好的答案,请引导我,谢谢:)。
【问题讨论】:
-
这与
node.js或bookshelf.js无关,请编辑您的问题以删除不相关的标签。 -
这种在数据库中为单个好友请求创建条目的方法是一种讨厌的方法。您应该创建另一个名为
is_accepted的列,其中包含好友请求的状态。这样,每当发送新朋友请求时,您都会创建一个条目,并在接受请求时更新相同的条目。尽可能改进数据库结构,否则一旦部署到生产环境,当您拥有更大的数据集时就会出现问题。
标签: javascript sql knex.js