gpt4 book ai didi

php - 在MySQL中存储时间范围并判断当前时间是否在时间范围内

转载 作者:可可西里 更新时间:2023-11-01 08:00:15 24 4
gpt4 key购买 nike

我有一个数据库表,以 TIME 格式存储商店的营业时间作为时间范围。例如,如果商店的营业时间是“上午 9 点至下午 5 点”,则将有 2 列“hours_open”和“hours_close”,我将 9:00 存储在“hours_open”中,将 17:00 存储在“hours_close”中。要确定商店当前是开门还是关门,我将运行查询:

SELECT * 
FROM shop
WHERE CAST(NOW() AS TIME) BETWEEN hours_open AND hours_close;

我现在需要做的是为营业时间超过午夜(例如晚上 9 点至凌晨 3 点)的商店提供便利。此外,商店在不同的日子可以有不同的营业时间,例如:周一至周四:晚上 9 点至凌晨 3 点,周五至周日:晚上 9 点至凌晨 5 点。

现在我很困惑。我该如何进行?我每天可以有一对 'hours_open' 和 'hours_close',例如:'mon_hours_open'、'mon_hours_close'、'tue_hours_open'、'tue_hours_close' ...

但我如何处理午夜 9 点到凌晨 5 点之后的营业时间?

有什么见解吗?如果有帮助,我将使用 PHP 和 Codeigniter 框架。

最佳答案

如果将时间存储在单独的表中,则检查时间会更容易,例如

shop_working_hours (  shop_id int FK,  day_of_week int,  hours_open time,  hours close time,  PK (shop_id, day_of_week))

That way the query might be like this:

SELECT s.*
FROM shop s
INNER JOIN shop_working_hours h ON s.id = h.shop_id
WHERE
CASE
WHEN h.hours_close > h.hours_open THEN
h.day_of_week = DAYOFWEEK(NOW()) AND
CAST(NOW() AS time) >= h.hours_open AND CAST(NOW() AS time) < h.hours_close
ELSE
h.day_of_week = DAYOFWEEK(NOW() - 1) AND
CAST(NOW() AS time) >= h.hours_open OR CAST(NOW() AS time) < h.hours_close
END

但是,如果您更愿意在同一个表中为一周中的每一天使用多个列,例如 *_hours_open*_hours_close,即 shop 表,那么过滤条件很可能必须更复杂,可能是这样的:

SELECT s.*
FROM shop s
CROSS JOIN (
SELECT 1 AS day_of_week
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
) h
WHERE
CASE h.day_of_week
WHEN 1 THEN
CASE
WHEN s.mon_hours_close > s.mon_hours_open THEN
h.day_of_week = DAYOFWEEK(NOW()) AND
CAST(NOW() AS time) >= s.mon_hours_open AND
CAST(NOW() AS time) < s.mon_hours_close
ELSE
h.day_of_week = DAYOFWEEK(NOW() - INTERVAL 1 DAY) AND
CAST(NOW() AS time) >= s.mon_hours_open OR
CAST(NOW() AS time) < s.mon_hours_close
END
WHEN 2 THEN
CASE
WHEN s.tue_hours_close > s.tue_hours_open THEN
… /* same for Tuesday */
END
… /* and for all the other days of week */
END

关于php - 在MySQL中存储时间范围并判断当前时间是否在时间范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com