Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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_Sql_Select - Fatal编程技术网

Php 找到下一次营业时间;mysql小时计算

Php 找到下一次营业时间;mysql小时计算,php,mysql,sql,select,Php,Mysql,Sql,Select,我想知道一家商店目前是否在营业时间内,如果没有,请选择下一次营业时间 最后,我需要能够把开幕日作为一个具体的日期 有人能告诉我如何构造这个查询吗 提前谢谢 CREATE TABLE `shop_hours` ( `id` int(11) NOT NULL, `shop_id` int(11) unsigned NOT NULL, `day_of_week` int(11) unsigned NOT NULL, `open_time` time NOT NULL, `close

我想知道一家商店目前是否在营业时间内,如果没有,请选择下一次营业时间

最后,我需要能够把开幕日作为一个具体的日期

有人能告诉我如何构造这个查询吗

提前谢谢

CREATE TABLE `shop_hours` (
  `id` int(11) NOT NULL,
  `shop_id` int(11) unsigned NOT NULL,
  `day_of_week` int(11) unsigned NOT NULL,
  `open_time` time NOT NULL,
  `close_time` time NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `shop_hours` (`id`, `shop_id`, `day_of_week`, `open_time`, `close_time`)
VALUES
    (1, 1, 0, '08:00:00', '24:00:00'),
    (2, 1, 1, '08:00:00', '24:00:00'),
    (3, 1, 2, '08:00:00', '24:00:00'),
    (4, 1, 3, '08:00:00', '24:00:00'),
    (5, 1, 4, '08:00:00', '24:00:00'),
    (6, 1, 5, '08:00:00', '24:00:00'),
    (7, 1, 6, '08:00:00', '24:00:00');
编辑:

为了澄清一点,我不想寻找开放的商店,而只是寻找一个特定商店的开放时间。根据开始/结束时间以及现在的时间。我将生成一些递增15分钟的可选时间戳


例如,如果一家商店刚刚下午1点关门,我将需要使用下一个营业日的开门/关门时间。商店不一定每天都营业,星期天可能会关门。

1检查商店是否营业。如果店铺关闭,结果为空:

select * from shop_hours
where shop_id = $id
      and dayofweek(curdate()) = day_of_week
      and curtime() between open_time and close_time;
2查找下一个开放时间:

(select open_time from shop_hours
 where shop_id = $id and curtime() < open_time
       and day_of_week >= dayofweek(curdate()))
union
(select open_time from shop_hours
 where shop_id = $id and curtime() < open_time
 order by day_of_week)
 union
(select open_time from shop_hours
 where shop_id = $id and curtime() > close_time
       and day_of_week >= dayofweek(curdate()))
union
(select open_time from shop_hours
 where shop_id = $id and curtime() > close_time
 order by day_of_week)
limit 1;
未经测试,但这应考虑周末环绕和一周中的漏洞,即关闭日


记住,数字1=星期天,2=星期一。。。如果您的表以不同的格式存储工作日,则必须相应地调整查询。

要查找目前已打开的店铺id

过时的:

要查找明天可用的开放时间,请执行以下操作:

编辑2:

要查找下一个可用的打开时间:

编辑:

日期\格式*日期*,'%w'使用格式0=星期日。。。6=星期六


如果要使用ISO格式1=星期一。。。7=Sunday在你的day_of_week字段中,你应该将php的date'N'绑定到你的查询中,或者使用Mysql的if函数IFDATE_FORMATNOW,'%w'=0,7,date_FORMATNOW,'%w',但这很难看

我真的不确定光标是用来做什么的-基本上我只需要在下一个开始和结束的时间取数据,也适用于特定日期。记录是什么样子的?你能发布你想要的结果吗?id和shop_id的区别是什么?id只是一个递增的值,没有实数use@Kristian它的用途是它是主键。这是一个非常实际的用途,所以为了找到下一个开放时间,我首先使用示例1,如果结果为空,我将创建一个循环,递增间隔日。这有效吗?请记住,如果你在说。。。早上1点,商店当天早上6点开门;换句话说,它只会返回那些在您运行脚本时打开的商店。@BurhanKhalid我也知道了,编辑后在下次打开时总是给出。@pozs您的编辑2示例似乎非常有用!但是,如果我在select中添加关闭时间,它与返回的打开日期不匹配?最后,是否可能将日期和开放时间分开?非常感谢您的帮助:选择基本上选择了所有未来7天的最短开放日期时间-您应该在php中分割为单独的日期和时间。如果您需要匹配的关闭时间,您应该查询返回的datetime的星期几;您无法在一个查询中获取它们。
SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(NOW(), '%w')
   AND CURTIME() BETWEEN `open_time` AND `close_time`
SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')
  SELECT `shop_id`,
         MIN(CAST(CONCAT(DATE(DATE_ADD(NOW(), INTERVAL ((7 + DATE_FORMAT(NOW(), '%w') - `day_of_week`) % 7) DAY)), ' ', `open_time`) AS DATETIME)) AS `next_open_datetime`
    FROM `shop_hours`
GROUP BY `shop_id`