mySQL 查询设计 - 计算多个内容项的投票分数

标签 mysql calculated-columns

我有一个结构如下的内容项表

|  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/

相关文章:

mysql:我想在我的行中包含一个值

java - 我想将计数查询的值分配给整数变量

php - MySQL select * with distinct id

mysql - 执行 SQL 脚本时出错;该进程无法访问该文件,因为它正被另一个进程使用 :'C:\\Users\\......\....cnf'

SQL 服务器 : Add a column with calculated Field

r - 计算均值时处理 NaN

Python:从现有列创建一个新列

c# - 在 C# 中计算值的数组(从 Excel 转换公式)

mysql - 处理从添加时间戳列到 mysql 表的尴尬

MySQL:如何创建可以查询匹配模式的记录