php - 查找下次营业时间; mysql小时计算

标签 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_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 点),我将需要使用下一个开放日的开/关时间。 (本店不一定天天营业,周日可能会休息)。

最佳答案

要找出 shop_id's,这是为 NOW() 开放的

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(NOW(), '%w')
   AND CURTIME() BETWEEN `open_time` AND `close_time`

已过时:

查找明天的可用open_time:

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')

编辑 2:

查找下一个可用的open_time:

  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`

编辑:

DATE_FORMAT(*DATE*, '%w') 使用格式 0 = Sunday ... 6 = Saturday

如果你想在你的 day_of_week 字段中使用 ISO 格式 1 = Monday ... 7 = Sunday,你应该绑定(bind) php 的 date('N ') 到您的查询(或使用 Mysql 的 if 函数 IF(DATE_FORMAT(NOW(), '%w') = 0, 7, DATE_FORMAT(NOW(), '%w')),但这很丑陋)

关于php - 查找下次营业时间; mysql小时计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13100717/

相关文章:

java - 构造SELECT时避免SQL注入(inject)

sql - 如何从 3 个不同的表中集体选择 100 行?

javascript - 如何在不相关的组件之间共享数据? Angular 6

mysql - mysql 从转储文件导入如何在程序级别工作?

php - 在 Propel 中使用 WHERE IN 和准备好的 SQL 语句

php - SQL 查询问题 - 每年的客户支出总和

mysql - 如何通过 LIKE 和部分匹配在 MySQL 中为 VARCHAR 字段使用索引?

php - 自动增量主键重复输入错误?

php - 如何从两个表中选择数据,其中第一个表的一行仅选择第二个表的第一行

php - 将动态表插入mysql