php - INTERVAL 的 MySQL 查询问题,如果没有提供数据则需要 0

标签 php mysql sql date intervals

我有以下声明:

SELECT
count(rs.rsc_id) as counter
FROM shots as rs
where rsc_rs_id = 345354
AND YEAR(rs.timestamp) = YEAR(DATE_SUB(CURDATE(), INTERVAL 6 MONTH))
GROUP BY DATE_FORMAT(rs.timestamp,'%Y%m')

rs.timestamp 是 unix 时间戳

输出就像每一行/每个月的数字,如“28”

它工作正常,但如果我有不一致的数据,比如只有过去三个月(不是所有六个月),我的数据库就得不到任何返回。我希望每次没有本月的数据时,返回 0...

有什么建议吗? 我考虑了一些案例陈述,但这似乎不太好......

谢谢!!

最佳答案

只有 6 个月,日期表似乎是不必要的,虽然这看起来很复杂(实际上不是!)

SELECT DATE_FORMAT(N.PivotDate,'%Y%m'), count(rs.rsc_id) as counter
FROM (
   select ADDDATE(CURDATE(), INTERVAL N MONTH) PivotDate
   FROM (
       select 0 N union all
       select 1 union all
       select 2 union all
       select 3 union all
       select 4 union all
       select 5 union all
       select 6) N) N
LEFT JOIN shots as rs
    ON rsc_rs_id = 345354
    AND DATE_FORMAT(N.PivotDate,'%Y%m')=DATE_FORMAT(FROM_UNIXTIME(rs.timestamp),'%Y%m')
GROUP BY DATE_FORMAT(N.PivotDate,'%Y%m')

关于php - INTERVAL 的 MySQL 查询问题,如果没有提供数据则需要 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350217/

相关文章:

php - PDO 不绑定(bind)占位符

php - 在数据库中存储、检索和重建路径

mysql - 什么时候最好不要使用 inner join?

Mysql - 在 Mysql 查询或 where 子句中添加 if 条件

javascript - 我想查看数据库中选定的数据

php - 有没有办法只为 MySQL 中的一个字段显示 WHERE 子句?

PHP,获取 $_GET 以忽略来自 url 的数字

mysql - 使用 select 语句插入 MySQL 表

mysql - 输出某个类别的总数

c# - 交易范围和交易