【问题标题】:MYSQL query check if user likeMYSQL查询检查用户是否喜欢
【发布时间】:2013-01-03 05:13:52
【问题描述】:

我要查询语句 我有两个表 第一个表“帖子”:

post_id     title    Userid
1           test     1

另一个表是'likes'

userid  post_id
1       1

我需要单个查询来检查用户是否喜欢这张照片 批量选择我的解决方案很差:

SELECT * FROM `table` WHERE x = x LIMIT 100;

给它 foreach 并查询每一行:

foreach($results as $v)
{
   $data[1] = $v;
   $data[1]['is_like'] = SELECT COUNT(*) FROM likes WHERE userid = 1;
}

1 是已经登录的用户 id

我需要单个查询来返回 post_id、.. 等并像 is_like 一样归档

【问题讨论】:

  • 请编辑您的问题以将一些示例数据添加到likes 表中,然后将您希望从该示例数据中获得的结果与posts 中的数据相结合。没有它很难说出你在问什么。谢谢。
  • 我已经添加了,你现在可以查看

标签: php mysql


【解决方案1】:

假设likes 只能有 1 行具有相同 (user_id,post_id) :

SELECT p.* , 
CASE WHEN 
l.id IS NULL THEN 0
ELSE 1
END as is_liked
FROM posts p
LEFT JOIN likes l ON l.user_id = p.user_id and l.post_id =p.post_id

如果不是(对于给定的 (user_id,post_id),likes 中有多个行):

SELECT p.* , 
CASE WHEN 
l.user_id IS NULL THEN 0
ELSE 1
END as is_liked
FROM posts p
LEFT JOIN 
(
   SELECT DISTINCT user_id,post_id FROM likes 
) l ON l.user_id = p.user_id and l.post_id =p.post_id;

或者

SELECT p.* , 
CASE 
WHEN  EXISTS (SELECT NULL FROM likes l 
  WHERE l.user_id = p.user_id and l.post_id =p.post_id) THEN 1
ELSE 0
END as is_liked
FROM posts p

更新 我希望我现在对这个问题有更好的理解。我的假设:posts.user_id 是创建帖子的用户的 ID; like 表存储有关谁喜欢该帖子的信息。因此,要检查所有帖子以及您是否需要特定的帖子($login_user_id 应该正确转义)

SELECT p.* , 
CASE 
WHEN  EXISTS (SELECT NULL FROM likes l 
  WHERE l.user_id = $login_user_id and l.post_id =p.post_id) THEN 1
ELSE 0
END as is_liked
FROM posts p

【讨论】:

  • 嗨,首先感谢您的回答我需要检查它是否已经登录用户我有变量像 $login_user_id = 1;我需要检查这个用户是否喜欢循环中的每个帖子
  • 我希望你不明白我的问题我的问题是:我有 ($login_user_id) 这个用户已经登录现在我需要检查每个帖子是否这个用户喜欢它,
  • @user1920678 :检查更新版本。希望我理解你想要达到的目标......
【解决方案2】:
SELECT 
    p.post_id,
    p.title,
    IF(l.post_id IS NOT NULL,1,0) as like
FROM posts as p
LEFT JOIN likes as l ON l.post_id = p.post_id AND l.userid = p.userid
WHERE p.Userid = 1

如果 likes 表中的 post_id 可用,则返回 1 else 0。

【讨论】:

    【解决方案3】:

    这样的事情应该作为单个查询工作(当然未经测试 - 您没有提供太多数据用于测试):

    select 
      p.title, count(l.post_id) 
    from 
      `posts` p
    inner join 
      `likes` l
    on 
      l.userid = p.userid and l.post_id = p.post_id
    where 
      p.userid = loggedinuserID
    group by 
      p.userid
    

    这将为您提供指定用户喜欢的帖子总数。

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 2012-12-23
      • 2014-03-30
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多