Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 按时间预定_Mysql - Fatal编程技术网

Mysql 按时间预定

Mysql 按时间预定,mysql,Mysql,我对MySQL有一个问题,我正在尝试获取starttime大于“16:42”但小于“18:42”的所有预订。我试过这个,但当我用“15:42”而不是“16:42”时,我仍然得到了相同的结果 SELECT * FROM `tables` INNER JOIN reservation_table ON `tables`.`id` = reservation_table.table_id INNER JOIN reservations ON

我对MySQL有一个问题,我正在尝试获取starttime大于“16:42”但小于“18:42”的所有预订。我试过这个,但当我用“15:42”而不是“16:42”时,我仍然得到了相同的结果

SELECT     * 
FROM       `tables` 
INNER JOIN reservation_table 
ON         `tables`.`id` = reservation_table.table_id 
INNER JOIN reservations 
ON         reservations.id = reservation_table.reservation_id 
INNER JOIN customers 
ON         customers.id = reservations.customer_id 
WHERE  `date` = '2016-11-02' 
   AND ( starttime <= '19:42' 
         AND starttime >= '16:42' ) 
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(开始时间='16:42')

可能是因为您有一些转换问题。。尝试使用显式转换

SELECT     * 
FROM       `tables` 
INNER JOIN reservation_table 
ON         `tables`.`id` = reservation_table.table_id 
INNER JOIN reservations 
ON         reservations.id = reservation_table.reservation_id 
INNER JOIN customers 
ON         customers.id = reservations.customer_id 
WHERE  `date` = '2016-11-02' 
   AND ( starttime <= str_to_date('19:42', '%H:%i' )
         AND starttime >= str_to_date('16:42' , '%H:%i')) 
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(starttime=str-to-date('16:42','%H:%i'))

如果
starttime
endtime
列采用
TIME
格式,则此查询应能解决您的问题:

因为正如mysql文档所说,“如果启用了无日期或无日期SQL模式下的无日期,则不允许零日期或部分日期。”您可能需要首先执行此查询:

SET sql_mode = '';
然后是第二个(如果starttime和endtime列采用时间格式):

选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(starttime=str-to-date('16:42','%H:%i'))
但如果这些列不是该格式,请执行以下操作:

SELECT     *
FROM       `tables` 
INNER JOIN reservation_table 
ON         `tables`.`id` = reservation_table.table_id 
INNER JOIN reservations 
ON         reservations.id = reservation_table.reservation_id 
INNER JOIN customers 
ON         customers.id = reservations.customer_id 
WHERE  `date` = '2016-11-02'
AND ( str_to_date(starttime, '%H:%i') <= str_to_date('19:42', '%H:%i')
    AND str_to_date(starttime, '%H:%i') >= str_to_date('16:42' , '%H:%i'))
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(str_to_date(starttime,'%H:%i')=str_to_date('16:42','%H:%i'))

为什么不将日期和时间合并到一个字段中:starttime列是哪种数据类型?是时间数据类型What means不起作用。。你有错误吗。。错误的结果。没有结果?如果我使用str_to_date(),我不会得到任何结果。抱歉,不清楚。如果没有str_to_date,您会得到一个结果,但当您更改时间字符串时,结果不会更改?当我使用str_to_date时,无论我填写什么,我都不会得到结果。当我不使用str_to_date时,我会得到一个结果,但当我将时间设置为15:42而不是16:42(在查询中)时,我仍然会得到一个结果。您应该更新您的问题,添加相关表的架构。。适当的数据样本和预期结果。。
SELECT     *
FROM       `tables` 
INNER JOIN reservation_table 
ON         `tables`.`id` = reservation_table.table_id 
INNER JOIN reservations 
ON         reservations.id = reservation_table.reservation_id 
INNER JOIN customers 
ON         customers.id = reservations.customer_id 
WHERE  `date` = '2016-11-02'
AND ( str_to_date(starttime, '%H:%i') <= str_to_date('19:42', '%H:%i')
    AND str_to_date(starttime, '%H:%i') >= str_to_date('16:42' , '%H:%i'))