2016-07-15 52 views
0

我有一个表的样子:

id | date  | count 
----------------------- 
1 | 2016-07-13 | 2 
2 | 2016-07-13 | 3 
3 | 2016-07-13 | 1 
4 | 2016-07-15 | 12 
5 | 2016-07-15 | 1 
6 | 2016-07-15 | 4 

这是我的查询

$test_query = $wpdb->get_results(" 
    SELECT 
    SUM(count) AS count, 
    date 
    FROM 
    ".$wpdb->prefix."statistics 
    WHERE 
    date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' 
    GROUP BY DATE(date) 
"); 

我运行查询,得到的结果

2016-07-13 | 6 
2016-07-15 | 17 

此工作良好,只有我有一个间隔为3天,结果从2016-07-14的日期不显示出来。我使用的图表值需要为空或0.

2016-07-14值是0还是有办法?

2016-07-13 | 6 
2016-07-14 | 0 
2016-07-15 | 17 
+0

如果您的表中没有“2016-07-14”日期,那么将无法生成值为0的“2016-07-14”条目。或者您将不得不使用某些巫术加入例如,包含未来3年的每个日期的表格。 – Julqas

回答

0

我找到一个解决方案。我有一个startdate和一个enddate。随着劳斯我得到他们之间的所有日期。然后我将它们与数据库中的日期进行比较。

谢谢大家的反应!

0

你可以试试下面的查询:

SELECT 
v.selected_date, 
COALESCE(YT.count,0) AS count 
FROM 
(select adddate(DATE_SUB('2016-07-15', INTERVAL 2 DAY),t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v 

LEFT JOIN 
(
    SELECT 
    SUM(count) AS count, 
    date 
    FROM 
    statistics #Your table name 
    WHERE 
    date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' 
    GROUP BY DATE(date) 
) AS YT 
ON YT.date = v.selected_date 
WHERE v.selected_date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' ; 

注:

高亮显示的部分将根据您指定的日期范围内变化。

在第一个突出显示的部分放置日期范围的开始日期。

在第二个和第三个突出显示的部分中,将您的整个日期范围像您在给定的查询中一样。

enter image description here