Nat*_*n H 1 php mysql sql timestamp
我有一个 MySQL 查询:
SELECT COUNT(*) AS total, DATE_FORMAT(event.serverTime,'%Y-%m-%d') AS sdate
FROM event
WHERE
event.serverTime >= :startDate
AND event.serverTime <= :endDate
GROUP BY sdate;
Run Code Online (Sandbox Code Playgroud)
哪个正确返回如下内容:
2011-08-10 => 5
2011-08-15 => 6
Run Code Online (Sandbox Code Playgroud)
但是,我还想获取计数为 0 的日期。所以假设 startDate 是 2011-08-10 并且 endDate 是 2011-08-15,我会看到:
2011-08-10 => 5
2011-08-11 => 0
2011-08-12 => 0
2011-08-13 => 0
2011-08-14 => 0
2011-08-15 => 6
Run Code Online (Sandbox Code Playgroud)
我正在使用 PHP,所以理论上我可以做一些复杂的循环并以某种方式填补空白,但我想知道是否有更好的解决方案?
请注意,如果没有好的 MySQL 解决方案存在,我也愿意接受好的 PHP 解决方案
小智 5
如果你想每天计数项目 0 结果,
尝试这个 :
set @date_start := (SELECT MIN(date_col) FROM my_table),
@date_end := (SELECT MAX(date_col) FROM my_table),
@i := 0;
SELECT DATE(ADDDATE(@date_start, INTERVAL @i:=@i+1 DAY)) AS date,
IFNULL((
SELECT COUNT(*) FROM my_table AS m2
WHERE DATE(m2.date_col) = DATE(ADDDATE(@date_start, INTERVAL @i DAY))
),0) AS total
FROM my_table AS m1
HAVING @i < DATEDIFF(@date_end, @date_start)
Run Code Online (Sandbox Code Playgroud)
输出 :
[
{
"date": "2017-03-01",
"total": "0"
},
{
"date": "2017-03-02",
"total": "0"
},
{
"date": "2017-03-03",
"total": "0"
},
{
"date": "2017-03-04",
"total": "0"
},
{
"date": "2017-03-05",
"total": "0"
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2022 次 |
| 最近记录: |