【问题标题】:mysql query to check if user votedmysql查询检查用户是否投票
【发布时间】:2015-06-17 20:28:14
【问题描述】:

在这种情况下我有

帖子表:

id 
title
description

post_votes 表:

id
post_id
user_id

cmets 表:

id
post_id
user_id
content

用户表:

id
username

我有一个关于我的索引页(登录用户)的查询

select 
`posts`.`id`, 
`posts`.`title`, 
`posts`.`description`,  
COUNT(distinct post_votes.id) AS votes, 
COUNT(distinct comments.id) AS comments 
from `posts` 
left join `post_votes` on `post_votes`.`post_id` = `posts`.`id` 
left join `comments` on `comments`.`post_id` = `posts`.`id` 
group by `posts`.`id`

这会显示所有帖子(事件)。对于每一个显示总票数和 cmets 的数量。此外,在索引页面上为每个帖子显示一个投票按钮。

用户可以对文章进行投票,我希望能够检查用户是否已经对每个帖子进行了投票,在这种情况下,显示禁用了该帖子的投票按钮。

我有用户 ID。

我该怎么做?

【问题讨论】:

    标签: mysql voting vote


    【解决方案1】:

    不确定 mysql 格式,但应该可以这样:

    select 
    CASE WHEN userVote.post_id IS NULL THEN 'No user vote' ELSE 'User has voted' END AS 'VoteStatus'
    `posts`.`id`, 
    `posts`.`title`, 
    `posts`.`description`,  
    COUNT(distinct post_votes.id) AS votes, 
    COUNT(distinct comments.id) AS comments 
    from `posts` 
    left join `post_votes` on `post_votes`.`post_id` = `posts`.`id`
    left join `post_votes` AS userVote on `post_votes`.`post_id` = `posts`.`id` AND `post_votes`.`user_id` = @myUserID
    left join `comments` on `comments`.`post_id` = `posts`.`id` 
    group by `posts`.`id`
    

    【讨论】:

    • 感谢 artm。我知道我需要来自同一个表的 2 个单独的连接。第一个加入计算票数,第二个加入检查用户是否已经投票。
    • @user3670128 没错,如果用户没有投票,您将从第二个左连接中获得 null,因此您可以使用 case when 来检查。
    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多