我有两个表 - 一个文章表和一个投票表。用户可以投票或投票选出他们选择的文章(类似于Reddit)。我在投票表中的字段是:
投票字段的值可以是0或1 ...(如果他们对文章进行投票,则为0,如果他们投票,则为1)。
我要做的是运行SELECT查询,返回所有得分最高的文章。也就是说,upvotes减去downvotes。但是,我完全不知道如何做到这一点。我能够返回所有投票最多的文章,例如:
-- article table is called "article"
-- vote table is called "user_article_vote"
SELECT article.title, article.summary, COUNT( user_article_vote.vote ) AS votes
FROM article
INNER JOIN user_article_vote ON article.article_id = user_article_vote.article_id
WHERE user_article_vote.vote = '1'
ORDER BY votes
这将返回评价最高的文章,但是有可能返回得分最高的文章(upvotes - downvotes)吗?
提前致谢。
答案 0 :(得分:2)
首先,我会将你的downvotes更改为-1而不是0.数学运算效果更好。
如何将SELECT语句更改为以下内容:
SELECT article.title,
article.summary,
SUM( CASE user_article_vote.vote WHEN 0 THEN -1 ELSE 1 END ) AS balance
FROM article
INNER JOIN user_article_vote ON article.article_id = user_article_vote.article_id
ORDER BY balance DESC
这是MySQL,所以我不知道你是否需要GROUP BY article.title, article.summary
条款。那总是让我感到困惑。