Mysql 查询以选择帖子并标记当前用户是否喜欢其中的一些帖子
我有3个表:用户表、post表、like表。当我从post中选择post时,我需要标记user.id=1是否已经喜欢其中一个post。就像在社交网络中,你已经喜欢的feed上的帖子都会被标记出来。但我是数据库方面的新手,不知道如何更新查询以标记用户是否喜欢帖子。id=1 我当前的选择如下所示:Mysql 查询以选择帖子并标记当前用户是否喜欢其中的一些帖子,mysql,sql,database,select,Mysql,Sql,Database,Select,我有3个表:用户表、post表、like表。当我从post中选择post时,我需要标记user.id=1是否已经喜欢其中一个post。就像在社交网络中,你已经喜欢的feed上的帖子都会被标记出来。但我是数据库方面的新手,不知道如何更新查询以标记用户是否喜欢帖子。id=1 我当前的选择如下所示: SELECT post.id, post.text, post.datetime, user.username, (SELECT COUNT(userId) FROM `like` WHERE p
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;
我还编写了一个查询,从like by user.id和post.id中选择一个数据,但不知道如何将我的两个选择连接起来并标记一篇文章:
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)
);
我有点生疏了,所以可能有一个更有效的方法来做这件事,但它是有效的,你可以根据需要调整它。如果当前用户喜欢它,以及总共有多少人喜欢它,下面将获取所有帖子和每个帖子的分数:
SELECT
exists(select 1 from `like` li where li.postId = p.id and li.userId = u.id limit 1) as liked
, u.username
, p.id as postId
, p.text
, (select count(distinct l.userId) from `like` l where l.postId = p.id) as liked
FROM
user u,
post p
WHERE
u.id = 2;
我有点生疏了,所以可能有一个更有效的方法来做这件事,但它是有效的,你可以根据需要调整它。如果当前用户喜欢它,以及总共有多少人喜欢它,下面将获取所有帖子和每个帖子的分数:
SELECT
exists(select 1 from `like` li where li.postId = p.id and li.userId = u.id limit 1) as liked
, u.username
, p.id as postId
, p.text
, (select count(distinct l.userId) from `like` l where l.postId = p.id) as liked
FROM
user u,
post p
WHERE
u.id = 2;
哇!谢谢,它很管用!我使用内部连接来获取post authorWhoops的用户名,是的,忘了那个部分。很高兴这有帮助。不客气。顺便说一句,小心不要因为内部联接而删除行。您可能需要这样做:选择exists从like li中选择1,其中li.postId=p.id和li.userId=u.id limit 1为like,up.username,p.id为postId,p.text,从like l中选择countdistinct l.userId,其中l.postId=p.id为like from user u,user up-up-internal-join-post p on-up.id=p.authorId,其中u.id=2;太好了,你救了我哇!谢谢,它很管用!我使用内部连接来获取post authorWhoops的用户名,是的,忘了那个部分。很高兴这有帮助。不客气。顺便说一句,小心不要因为内部联接而删除行。您可能需要这样做:选择exists从like li中选择1,其中li.postId=p.id和li.userId=u.id limit 1为like,up.username,p.id为postId,p.text,从like l中选择countdistinct l.userId,其中l.postId=p.id为like from user u,user up-up-internal-join-post p on-up.id=p.authorId,其中u.id=2;太好了,你救了我