gpt4 book ai didi

mysql - 类似 Stackoverflow 的评论投票 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 04:49:40 25 4
gpt4 key购买 nike

我正在开发一个像 Stackoverflow 或 Disqus 这样的评论系统,人们可以在其中发表评论并对评论进行投票。为此,我有三个表:USERSCOMMENTSVOTES

我无法弄清楚如何编写查询来计算选票并返回给定用户是否已投票。每个用户对每个评论只能投票一次,不能对自己的评论投票。此外,评论和投票不仅仅针对一个主题。每个页面都有自己的主题,因此在执行 GETSELECT 评论和投票时,需要反射(reflect) WHERE topic_id='X'也在查询中。

这是我的表的数据,到目前为止我的查询看起来如何,以及我希望它返回什么:

USERS table
user_id user_name
1 tim
2 sue
3 bill
4 karen
5 ed

COMMENTS table
comment_id topic_id comment commenter_id
1 1 good job! 1
2 2 nice work 2
3 1 bad job :) 3

VOTES table
vote_id vote comment_id voter_id
1 -1 1 5
2 1 1 4
3 1 3 1
4 -1 2 5
5 1 2 4

SELECT users.*, comments.*, count(vote as totals), sum(vote=1 as yes), sum(vote=-1 as no),
my_votes.vote as did_i_vote, users.* as IM_THE_USER
from comments
join votes
on comments.comment_id=votes.comment_id
join users
on comments.commenter_id=users.user_id
join votes as MY_votes
on MY_votes.voter_id=IM_THE_USER.user_id
where topic_id=1 and IM_THE_USER.user_id=1
group by comment_id

user_id user_name comment_id topic_id comment commenter_id totals yes no did_i_vote
1 tim 1 1 good job! 1 2 1 1 NULL
3 bill 3 1 bad job:) 3 1 1 0 1

最佳答案

SQL Fiddle

select u.user_id, u.user_name,
c.comment_id, c.topic_id,
sum(v.vote) as totals, sum(v.vote > 0) as yes, sum(v.vote < 0) as no,
my_votes.vote as did_i_vote
from comments c
join users u on u.user_id = c.commenter_id
left join votes v on v.comment_id = c.comment_id
left join votes my_votes on my_votes.comment_id = c.comment_id
and my_votes.voter_id = 1
where c.topic_id = 1
group by c.comment_id, u.user_name, c.comment_id, c.topic_id, did_i_vote;

更新:固定分组方式

由 OP (tim peterson) 更新:固定计数为总数并添加评论本身以由查询返回 final working SQLFiddle

关于mysql - 类似 Stackoverflow 的评论投票 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com