Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询以选择帖子并标记当前用户是否喜欢其中的一些帖子_Mysql_Sql_Database_Select - Fatal编程技术网

Mysql 查询以选择帖子并标记当前用户是否喜欢其中的一些帖子

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

我有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 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;太好了,你救了我