【发布时间】:2017-05-03 16:52:44
【问题描述】:
我有 3 张桌子:user、post、like。当我从post 中选择帖子时,我需要标记其中一个是否已被user.id = 1 喜欢。就像在社交网络中一样,您已经喜欢的提要上的帖子 - 已标记。但我是数据库新手,不明白如何更新我的查询以标记帖子是否被user.id = 1 点赞。
我当前的选择如下所示:
SELECT post.id, post.text, post.datetime, user.username,
(SELECT COUNT(userId) FROM `like` WHERE postId = post.id) AS likes
FROM post
INNER JOIN user ON user.id = post.authorId;
我还编写了一个查询,通过user.id 和post.id 从like 中选择一个数据,但不知道如何加入我的两个选择并标记一个帖子:
SELECT * from `like` as lk where lk.userId = 1 and lk.postId = 5;
我目前第一次查询的结果是:
{
"username": "monica",
"datetime": "2017-05-02T16:11:31.000Z",
"id": 3,
"likes": 2,
"text": "Do pariatur anim aliqua adipisicing sit non."
}
但我需要,如果我询问 user.id=1 的帖子:
{
"liked": true, // means that user.id == 1 already liked the post
"username": "monica",
"datetime": "2017-05-02T16:11:31.000Z",
"id": 3,
"likes": 2,
"text": "Do pariatur anim aliqua adipisicing sit non."
}
我的桌子:
CREATE TABLE IF NOT EXISTS user (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(15),
// ...
);
CREATE TABLE IF NOT EXISTS post (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
text VARCHAR(500),
authorId INT UNSIGNED,
// ...
);
CREATE TABLE IF NOT EXISTS `like` (
postId INT UNSIGNED,
userId INT UNSIGNED,
PRIMARY KEY (postId, userId)
);
【问题讨论】: