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
Php 如何从Mysql数据库中按当前时间获取当前班次_Php_Mysql - Fatal编程技术网

Php 如何从Mysql数据库中按当前时间获取当前班次

Php 如何从Mysql数据库中按当前时间获取当前班次,php,mysql,Php,Mysql,这是我的桌子:班主任 我需要一个查询,其中我将通过当前时间,它将给出当前正在进行的班次记录 非常感谢您的帮助。首先将开始时间和结束时间的数据类型更改为时间戳,并以其格式输入时间,然后 SELECT shift FROM shift_master WHERE start_time <= NOW() AND end_time > NOW(); 很难将存储为varchar的时间与当前_时间进行比较。如果可能的话,按上述方法进行操作,这将简化您的工作。尝试使用此方法 SELECT shif

这是我的桌子:班主任

我需要一个查询,其中我将通过当前时间,它将给出当前正在进行的班次记录


非常感谢您的帮助。

首先将开始时间和结束时间的数据类型更改为时间戳,并以其格式输入时间,然后

SELECT shift FROM shift_master WHERE start_time <= NOW() AND end_time > NOW();
很难将存储为varchar的时间与当前_时间进行比较。如果可能的话,按上述方法进行操作,这将简化您的工作。

尝试使用此方法

SELECT shift FROM shift_master WHERE TIME(NOW()) BETWEEN TIME(STR_TO_DATE(start_time,'%h:%i %p')) AND TIME(STR_TO_DATE(end_time,'%h:%i %p'))
请尝试此查询

set @now_time = UNIX_TIMESTAMP( now() ) % 86400;

SELECT shift
FROM ( SELECT shift, UNIX_TIMESTAMP( STR_TO_DATE(start_time,'%h:%i %p') ) % 86400 as start, UNIX_TIMESTAMP( STR_TO_DATE(end_time,'%h:%i %p') ) % 86400 as end
FROM shift_master ) M
WHERE ( start < end AND @now_time BETWEEN start AND end - 1 ) OR
( start > end AND ( @now_time > start or @now_time < end ) )

谢谢@Giorgos bets,因为varchar不是一个好主意。使用MySQL的本机时间数据类型会使事情变得非常简单。事实证明,表示班次的方式中最糟糕的部分是晚上跨越了几天。我想如果你打破了夜班的两个记录,即晚上10:00-12:00和上午00:00-06:00,那么得到你想要的结果会简单得多。谢谢你的回答。当前时间小于22:00:00时为真。但我现在的时间是23:00:00,结果应该是“晚上”。但是在你的查询中我什么都没有。抱歉@Vrajesh Doshi,我们的要求是以“H:I A”格式存储。因此,在时间戳中,我无法在此格式中存储数据。@PHPDev此查询的输出是什么?@PHPDev您能给我从当前表导出的sql吗?
set @now_time = UNIX_TIMESTAMP( now() ) % 86400;

SELECT shift
FROM ( SELECT shift, UNIX_TIMESTAMP( STR_TO_DATE(start_time,'%h:%i %p') ) % 86400 as start, UNIX_TIMESTAMP( STR_TO_DATE(end_time,'%h:%i %p') ) % 86400 as end
FROM shift_master ) M
WHERE ( start < end AND @now_time BETWEEN start AND end - 1 ) OR
( start > end AND ( @now_time > start or @now_time < end ) )
SELECT shift
FROM shift_master
WHERE (start_time < end_time and (start_time <= time(now()) and end_time > time(now())))
OR (start_time > end_time and (start_time <= time(now()) or end_time > time(now())))