MySQL - 如何运行按分数排序结果的SELECT查询 - 例如upvotes - downvotes

时间:2009-09-20 21:43:44

标签: sql mysql

我有两个表 - 一个文章表和一个投票表。用户可以投票或投票选出他们选择的文章(类似于Reddit)。我在投票表中的字段是:

  • 的article_id
  • USER_ID
  • 表决

投票字段的值可以是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)吗?

提前致谢。

1 个答案:

答案 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条款。那总是让我感到困惑。