我有一个结构如下的内容项表
| contentid | message | categoryid | userid | dateadded | etc..
15 foo bar 3 4 somedate
16 more foo bar 3 4 somedate
16 foo stuff 3 4 somedate
和投票表,其中 direction = 1 = 赞成票,= 2 表示反对票。
| voteid | contentid | userid | direction | dateadded
7 15 4 1 some date
8 15 6 1 some date
9 15 17 2 some date
我想选择一组内容项,在末尾有一个附加列,其中包含根据投票表中的投票计算出的分数。
以前,我有一个附加到内容表的“分数”列,每次投票时,它都会更新其分数。这样做是为了让我不必使用更复杂的查询来计算每个 SELECT 的分数,但我现在想更改它。
这个投票表是不久前设计的,所以如果将所有投票值更改为 1 或 2 以外的值(对于反对票,可能是 -1)会更容易,我将更新整个表。
提取所有内容项的查询是什么,每个内容项在计算列中都有一个分数?
最佳答案
假设投票“方向”代表赞成票和反对票:
SELECT i.contentid,
SUM(CASE WHEN v.direction = 1 THEN 1
WHEN v.direction = 2 THEN -1
ELSE 0 END) AS Votes
FROM items i
LEFT JOIN votes v
ON i.contentid = v.contentid
GROUP BY i.contentid
HAVING SUM(CASE WHEN v.direction = 1 THEN 1
WHEN v.direction = 2 THEN -1
ELSE 0 END) > -3
关于mySQL 查询设计 - 计算多个内容项的投票分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7677114/