如何确定商店是开放还是关闭 - 处理小时数?

时间:2011-11-22 10:59:17

标签: php mysql database

在数据库中存储商店开启和关闭时间的最佳方法是什么,以及如何用PHP计算时间?

我想出了这个表设计:

+----+---------+----------+-----------+------------+
| id | shop_id | week_day | open_hour | close_hour |
+----+---------+----------+-----------+------------+
|  1 |       3 |        1 | 15:00:00  | 23:00:00   |
|  2 |       3 |        2 | 15:00:00  | 23:00:00   |
|  3 |       3 |        3 | 18:00:00  | 02:00:00   |
|  4 |       3 |        4 | 18:00:00  | 02:00:00   |
|  5 |       3 |        5 | 18:00:00  | 03:00:00   |
+----+---------+----------+-----------+------------+

+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment |
| shop_id    | int(11) | NO   |     | NULL    |                |
| week_day   | int(11) | NO   |     | NULL    |                |
| open_hour  | time    | NO   |     | NULL    |                |
| close_hour | time    | NO   |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+

例如,在星期二(week_day = 2),它在下午3点开放,在晚上11点(星期二)关闭。

星期三(“week_day = 2”),它在下午6点开放,在午夜凌晨2点结束,即周四。午夜(00:00:00或之后)关闭时间应该如何存储在数据库中?

假设客户希望在星期二晚上10点下订单(shop_id = 3),他们应该能够根据数据库数据这样做。但是,如果客户希望在星期四凌晨1点订购,但数据库显示week_day = 3关闭02:00:00

如果商店开放,如何用PHP编写工作?看起来很复杂!

我是否需要更改表格设计,以便用PHP编写更容易?

3 个答案:

答案 0 :(得分:3)

我猜你可以像这样做一个SQL问题,并检查查询是否返回任何结果:

SELECT * FROM opening_hours_table WHERE shop_id = your_shop_id AND week_day = WEEKDAY(NOW()) + 1 AND open_hour < NOW() AND close_hour > NOW()

如果您收到结果,那么请在开放时间内。

修改 对SQL进行了一些语法修正。

答案 1 :(得分:2)

您可以考虑使表信息真正正确

+----+---------+----------+-----------+------------+
| id | shop_id | week_day | open_hour | close_hour |
+----+---------+----------+-----------+------------+
|  1 |       3 |        1 | 15:00:00  | 23:00:00   |
|  2 |       3 |        2 | 15:00:00  | 23:00:00   |
|  3 |       3 |        3 | 18:00:00  | 23:59:59   |
|  4 |       3 |        4 | 00:00:00  | 02:00:00   |
|  5 |       3 |        4 | 18:00:00  | 23:59:59   |
|  6 |       3 |        5 | 00:00:00  | 02:00:00   |
|  7 |       3 |        5 | 18:00:00  | 23:59:59   |
|  8 |       3 |        6 | 00:00:00  | 03:00:00   |
+----+---------+----------+-----------+------------+

然后使用以下类型(此查询是您提到的星期二晚上10:00):

SELECT count(*) FROM `shop` 
 WHERE week_day=3 
 and open_hour<='22:00:00' 
 and close_hour>='22:00:00'

答案 2 :(得分:0)

我能理解(如果我不理解,请纠正我)你应该检查时间是在当天的open_hour和23:59之间,以及第二天的00:00到close_hour之间。 / p>

这应该在APP代码上完成,而不是在数据库上完成。

恕我直言,你的数据库设计是对的!