Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL选择日期范围内的所有日期,即使当天没有可用数据_Php_Mysql_Date - Fatal编程技术网

Php MySQL选择日期范围内的所有日期,即使当天没有可用数据

Php MySQL选择日期范围内的所有日期,即使当天没有可用数据,php,mysql,date,Php,Mysql,Date,我每天都有记录作为打卡时间。我想显示date givens周的所有日期,并显示日期,即使在中找不到该日期的数据 例如: Monday 2015-05-04 - 2015-05-04 10:30:00 - 2015-05-04 15:45:34 Tuesday 2015-05-05 - 2015-05-05 08:43:23 - 2015-05-05 17:18:13 Wednesday 2015-05-06 - 2015-05-06 09:03:12 Thursday 2015-05-07

我每天都有记录作为打卡时间。我想显示date givens周的所有日期,并显示日期,即使在中找不到该日期的数据

例如:

Monday 2015-05-04
- 2015-05-04 10:30:00
- 2015-05-04 15:45:34

Tuesday 2015-05-05
- 2015-05-05 08:43:23
- 2015-05-05 17:18:13

Wednesday 2015-05-06
- 2015-05-06 09:03:12

Thursday 2015-05-07
0 Entries

Friday 2015-05-08
0 Entries
DB架构如下所示:

id | user_id | punch_time | punch_status
理想情况下,我希望能够将MySQL的日期更改为任何时间戳,并显示该周的日期和结果

谢谢:D


新的 你知道为什么在没有记录的日子里这样做是行不通的吗

SELECT * FROM punch_clock, calendar_table WHERE calendar_table.dt = DATE(punch_clock.punch_time) && calendar_table.week_num = $week && calendar_table.y = $year ORDER BY punch_clock.punch_time
更新的查询

 SELECT * FROM punch_clock LEFT JOIN calendar_table ON calendar_table.dt = DATE(punch_clock.punch_time) WHERE calendar_table.week_num = 18 && calendar_table.y = 2015;
试试这个:

SELECT *
FROM
  (
    SELECT a.Date AS mydate
    FROM (
           SELECT date('2015-05-08') - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date
           FROM (SELECT 0 AS a
                 UNION ALL SELECT 1
                 UNION ALL SELECT 2
                 UNION ALL SELECT 3
                 UNION ALL SELECT 4
                 UNION ALL SELECT 5
                 UNION ALL SELECT 6
                 UNION ALL SELECT 7
                 UNION ALL SELECT 8
                 UNION ALL SELECT 9) AS a
             CROSS JOIN (SELECT 0 AS a
                         UNION ALL SELECT 1
                         UNION ALL SELECT 2
                         UNION ALL SELECT 3
                         UNION ALL SELECT 4
                         UNION ALL SELECT 5
                         UNION ALL SELECT 6
                         UNION ALL SELECT 7
                         UNION ALL SELECT 8
                         UNION ALL SELECT 9) AS b
             CROSS JOIN (SELECT 0 AS a
                         UNION ALL SELECT 1
                         UNION ALL SELECT 2
                         UNION ALL SELECT 3
                         UNION ALL SELECT 4
                         UNION ALL SELECT 5
                         UNION ALL SELECT 6
                         UNION ALL SELECT 7
                         UNION ALL SELECT 8
                         UNION ALL SELECT 9) AS c
         ) a
    WHERE a.Date BETWEEN '2015-05-04' AND '2015-05-08'
  ) dates
  LEFT JOIN
  (
    SELECT *
    FROM
      table1
  ) data
    ON DATE_FORMAT(dates.mydate, '%Y%m%d') = DATE_FORMAT(data.punch_time, '%Y%m%d')
SQL Fiddle:

对于您的问题,这是一个快速但不是理想的解决方案。但我认为它已经足够使用了


如果您想“完美地”解决这个问题,我建议您阅读这篇文章:

对于MySQL,我通常使用一个日历表(例如包含2030年之前的所有日期)
它允许做很多其他的事情,比如这种查询,管理特殊的日子,等等

您需要
左键连接
您的表,我的意思是此日历表必须“左键定位”

接受您的最后一个查询,我会这样做:

选择*
从日历作为cal
左连接打孔时钟作为临时市政局
日期(cal.dt=日期(临市局打卡时间))
哪里是真的
和cal.week_num=18
和cal.y=2015
;

没有尝试,但这是一个想法。

即使这是一个非常古老的问题,我也不喜欢额外的日历表的想法,于是提出了这个查询,并针对这个问题进行了调整

SELECT pc.`id`, pc.`user_id`, pc.`punch_status`, dates.`date` FROM punch_clock pc RIGHT JOIN (SELECT week.`date` FROM (
    SELECT CURDATE() AS `date`
       UNION SELECT CURDATE() + INTERVAL 1 DAY
       UNION SELECT CURDATE() + INTERVAL 2 DAY
       UNION SELECT CURDATE() + INTERVAL 3 DAY
       UNION SELECT CURDATE() + INTERVAL 4 DAY
       UNION SELECT CURDATE() + INTERVAL 5 DAY
       UNION SELECT CURDATE() + INTERVAL 6 DAY
       UNION SELECT CURDATE() - INTERVAL 1 DAY
       UNION SELECT CURDATE() - INTERVAL 2 DAY
       UNION SELECT CURDATE() - INTERVAL 3 DAY
       UNION SELECT CURDATE() - INTERVAL 4 DAY
       UNION SELECT CURDATE() - INTERVAL 5 DAY
       UNION SELECT CURDATE() - INTERVAL 6 DAY
    ) AS week 
WHERE YEARWEEK(`date`, 0) = YEARWEEK(CURDATE(), 0)) AS dates ON dates.`date` = DATE(pc.`punch_time`) ORDER BY dates.`date`

不太漂亮,但它不需要额外的桌子就能完成任务。这使用从周一到周日的一周,使用
YEARWEEK(xxx,1)
表示从周日到周一的一周

桌子的结构是什么?您尝试过什么?尝试获取所需范围内的所有数据并按日期排序。然后用phpAnd循环它,你尝试了什么查询?你需要一个日历表来加入,以获取全天的值查看本文,谢谢你的帮助。我已经阅读了这篇文章并实现了日历表。我的下一步是在加入日期的mysql查询中同时包含punch_clock和calendar_表吗?@tutchmedia应该是这样的。您可以用日历替换my SQL中的日期。除了它不显示没有数据的日期之外,它还能工作吗?(见我在原始帖子中的提问)有什么想法吗?需要从日历表左键连接到punchcard表吗?我似乎无法正确理解这一点。它仍然没有显示没有条目的日期(参见更新的查询)-有什么想法吗?