私は、Stackoverflow や Disqus のようなコメント システムを開発しており、人々がコメントしたり、コメントに投票したりできます。USERS
これには、 、の 3 つのテーブルがCOMMENTS
ありVOTES
ます。
投票をカウントし、特定のユーザーが投票したかどうかを返すクエリを作成する方法を理解するのに苦労しています。各ユーザーはコメントごとに 1 回のみ投票でき、自分のコメントには投票できません。また、コメントや投票は 1 つのトピックだけではありません。各ページには独自のトピックがあるため、コメントや投票を行うときは、クエリにも反映するGET
必要があります。SELECT
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