Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.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
从MySQL中的bookings表获取所有可用的时隙范围_Mysql - Fatal编程技术网

从MySQL中的bookings表获取所有可用的时隙范围

从MySQL中的bookings表获取所有可用的时隙范围,mysql,Mysql,考虑到现有的预订及其完成时间,我正在尝试在我的预订系统中获得一系列可供选择的时段。 时间间隔为15分钟,只能在09:00到18:00之间预订 我遇到的问题是,它没有显示所有可用的时间段。在下面的模式和数据中,它遗漏了最后一个时隙范围,但这并不局限于最后一条记录。。如果我只有两次预订,它仍然只显示一次预订 模式: 查询: 从2013-11-20 17:15到2013-11-20 17:45,这里应该还有另一行。如果我理解正确,您正在从预订中选择,以获取开放时间段的开始和结束时间。问题是,如果我理解

考虑到现有的预订及其完成时间,我正在尝试在我的预订系统中获得一系列可供选择的时段。 时间间隔为15分钟,只能在09:00到18:00之间预订

我遇到的问题是,它没有显示所有可用的时间段。在下面的模式和数据中,它遗漏了最后一个时隙范围,但这并不局限于最后一条记录。。如果我只有两次预订,它仍然只显示一次预订

模式:

查询:


从2013-11-20 17:15到2013-11-20 17:45,这里应该还有另一行。如果我理解正确,您正在从预订中选择,以获取开放时间段的开始和结束时间。问题是,如果我理解正确,所有时隙的端点都不在数据库中,最后一个时隙应该是2013-11-20 17:15到2013-11-20 18:00,对吗

有点难看,但添加端点作为约会似乎有效

SELECT Available_from, Available_to
FROM (
SELECT @lasttime_to AS Available_from, time_from AS Available_to, @lasttime_to := time_to
FROM (SELECT time_from, time_to
      FROM bookings
      WHERE time_to >= '2013-11-20 08:59'
        AND time_from < '2013-11-20 22:01'
       UNION ALL
     SELECT '2014-11-20 18:00', '2014-11-20 18:00'
           ORDER BY time_from 

     ) e
JOIN (SELECT @lasttime_to := NULL) init) x
WHERE Available_to > DATE_ADD(Available_from, INTERVAL 15 MINUTE)

如果您添加另一个从您的最长时间段开始的预订,它对我来说就像预期的一样有效。@wils484是的,它确实有效,但不显示所有可用的时间段,如果您参考第一个SQL FIDLE,它缺少17:15到17:45的时间段。我的回答有意义吗?我想如果您正在寻找可以指定为预订开始时间的时间,UNION ALL值将是2013-11-20 17:45这只解决了在我的第一个小提琴中使用确切数据集时的问题,但这并不能解决查询问题。检查第二个问题以查看其他不一致之处。是否有改进此类查询的方法?我使用此查询查找可用的时间段。它工作得非常好,但将其用于while循环以查找所有可用的时间段有点慢
SELECT available_from, available_to
FROM (
    SELECT @lasttime_to AS available_from, time_from AS available_to, @lasttime_to := time_to
    FROM (SELECT time_from, time_to
          FROM bookings
          WHERE time_to >= '2013-11-20 09:00'
            AND time_from < '2013-11-20 18:00'
      ORDER BY time_from) e
    JOIN (SELECT @lasttime_to := NULL) init) x
WHERE available_to > DATE_ADD(available_from, INTERVAL 15 MINUTE)
|      AVAILABLE_FROM |                    AVAILABLE_TO |
|---------------------|---------------------------------|
| 2013-11-20 09:15:00 | November, 20 2013 11:00:00+0000 |
| 2013-11-20 11:30:00 | November, 20 2013 12:00:00+0000 |
| 2013-11-20 12:45:00 | November, 20 2013 16:30:00+0000 |
SELECT Available_from, Available_to
FROM (
SELECT @lasttime_to AS Available_from, time_from AS Available_to, @lasttime_to := time_to
FROM (SELECT time_from, time_to
      FROM bookings
      WHERE time_to >= '2013-11-20 08:59'
        AND time_from < '2013-11-20 22:01'
       UNION ALL
     SELECT '2014-11-20 18:00', '2014-11-20 18:00'
           ORDER BY time_from 

     ) e
JOIN (SELECT @lasttime_to := NULL) init) x
WHERE Available_to > DATE_ADD(Available_from, INTERVAL 15 MINUTE)