计算SELECT语句中列值的总和

vit*_*tto 0 php mysql select pdo

我有一个table地方如果用户已经达到了一些像3 penalities的我应该算的,所以如果用户达到或超过3分,他被禁止:

table_warnings
- id
- user_id
- warning
- warning_date

id    user_id     warning    warning_date
1     5478        1          2010-02-25 12:59:00
2     5478        1          2010-02-28 08:27:00
3     5478        2          2010-03-01 22:44:11
Run Code Online (Sandbox Code Playgroud)

我已经开始提出这个问题了,用户KM帮助我解决了SELECT类似这样的解决方案:

SELECT COUNT(warning)
FROM table_warnings AS w
INNER JOIN table_users AS u
ON w.user_id = u.user_id
WHERE w.user_id = 5478 AND warning_date >= '2010-02-05 12:59:00'
HAVING COUNT(warning) >= 3
Run Code Online (Sandbox Code Playgroud)

我可以找到一种方法SELECT来检索用户在过去30天内获得了多少个点数吗?

Lar*_*tig 5

什么是"warn_penalty"列.我可以假设它与"警告"相同吗?如果是这样,只需将COUNT()更改为SUM()即可.通过一些额外的修复来消除第二个表:

SELECT user_id, SUM(warning)
FROM table_warnings 
WHERE  warning_date >= '2010-02-05 12:59:00'
GROUP BY user_id
HAVING SUM(warning) >= 3
Run Code Online (Sandbox Code Playgroud)

将返回被禁止的所有用户.

或者,如果您有user_id并希望知道它是否被禁止:

SELECT SUM(warning)
FROM table_warnings 
WHERE user_id = 5478 AND warning_date >= '2010-02-05 12:59:00'
Run Code Online (Sandbox Code Playgroud)

并检查结果.