php - 加入 MySQL 范围内的所有日期

标签 php mysql date

我有下表:

administratieID        |     varchar
getalTypeNaam          |     varchar
datum                  |     date
waarde                 |     double

使用以下查询:

                                Select administratieID AS AI, waarde WA, datum DT
                                from getalType
                                where getalTypeNaam = 'test'
                                and datum between DATE_SUB(NOW(), INTERVAL 10 DAY)  and DATE_SUB(NOW(), INTERVAL 15 DAY) 
                                order by datum

我想要的是,即使数据库中没有与该日期对应的任何内容,我也可以选择返回指定日期之间的所有日期。即使没有值我也想要这个,但在那种情况下我想返回值 0。

所以我想要这个作为返回:

date       administratieID waarde
10-10-2016 xxx                 10
11-10-2016 xxx                  0  <-- no data available
12-10-2016 xxx                 40
13-10-2016 xxx                  9
14-10-2016 xxx                  0  <-- no data available

现在我明白了:

date       administratieID waarde
10-10-2016 xxx                 10
12-10-2016 xxx                 40
13-10-2016 xxx                  9

最佳答案

有很多方法可以做到这一点,但是它们很老套...

一种方法是使用内联递增变量,并使用您知道其中至少包含与日期范围内的最大天数一样多的记录的虚拟表。然后你可以这样做:

SET @date = DATE_SUB(NOW(), INTERVAL 15 DAY);  #or whatever the earliest date you need is



SELECT DISTINCT
      IFNULL(administratieID,'XXX') AS AI
    , IFNULL(waarde,0) AS WA
    , all_dates AS DT
FROM 
     (SELECT @date:=DATE_ADD(@date, INTERVAL 1 DAY) AS all_dates
     FROM
    my_dummy_table_with_lots_of_records
    WHERE @date >= DATE_SUB(NOW(), INTERVAL 15 DAY) AND @date <= DATE_SUB(NOW(), INTERVAL 10 DAY)) d LEFT JOIN

    getalType t ON
         DATE_FORMAT(all_dates,'%Y-%m-%d') = DATE_FORMAT(t.datum,'%Y-%m-%d')   
WHERE
    IFNULL(getalTypeNaam, 'Test') = 'Test'  #if there's no data we still need to return something

ORDER BY all_dates;

另一种更简单的方法是拥有一个名为“all_dates”的表,您可以在连接中使用它。该表将只有一列“datum”,您可以在其中填充可以在 getalType 表中使用的每个可能的日期。这甚至可以通过触发器来完成。

然后你链接到这个表,而不是做上面所有的派生废话。

这也可以避免必须有多个 sql 语句,因为您没有需要初始化的变量。

关于php - 加入 MySQL 范围内的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41854971/

相关文章:

php - 在Facebook App上传图片

php - 带有 PHP 5 客户端的 WCF 4.0

sql - mysql 程序错误 ERROR 1304 & ERROR 1305

php - mysqli_result::free 增加 php 内存使用

mysql - 按日期时间的天选择计数组

javascript - 显示默认日期值 HTML 表单 iOS

php - MySQL 查询无法正常工作

php - 当目录名称带有方括号 "[ ]"等特殊字符时,Glob 不起作用

php - 在 PHP 生成的表中嵌入 if 语句

java - Java/Android 中 Time 类功能的替换以及 DateTime 类的理解