我有一个看起来像这样的表
+----+----------+------------
| id | restaurant| ... |
+----+----------+-----------+
| 1 | one | ... |
| 2 | tow | ... |
现在对于餐厅,我想为每家餐厅添加营业时间。现在,根据我的阅读,拥有一个新专栏并将其称为小时然后拥有一个 varchar
并拥有类似
"9:00-22:00,10:00-20:00,10:00-21:00"
然后,当我将这些数据拉入我的应用程序时,稍后将其在逗号处拆分成一个数组。不能 100% 确定这为什么不好,但我知道我不应该这样做对吗?
所以我想制作一个名为“Restaurant_Hours”的新表,让它看起来像这样
+----+----------+------------+------------+
| id | restaurant| mon |tue | ect...
+----+----------+------------+------------+
| 1 | one | 9:00-22:00|10:00-22:00 |
| 2 | tow | ect. | ect. |
这是制作新表格并使其像我展示的那样的策略吗?这也不是正确的做事方式吗?然后餐厅将成为我的独特之处,这样我就可以通过这种方式获得时间?
最佳答案
我的想法是这样的:
CREATE TABLE `restaurant_hours` (
`restaurant_hour_id` INT NOT NULL AUTO_INCREMENT,
`restaurant_id` INT NOT NULL,
`day_of_week` TINYINT NULL,
`opens_at` TIME NOT NULL,
`closes_at` TIME NOT NULL,
`hours_desc` CHAR(16) NOT NULL DEFAULT ''
);
当然,restaurant_id 应该是 restaurants
的 FOREIGN KEY
。id
,您可能想要一个UNIQUE
约束 (restaurant_id, day_of_week, hours_desc)。如果他们有特殊的假期时间,您可能希望使用 day_of_week == 0 作为“标志”。
...或者如果您真的有雄心壮志,请让它也引用某种“day_descriptions”表,其中 1-7 对应周日至周六,>=8 可用于表示可能需要的事情按年份计算(特定节假日)。
编辑:hours_desc 旨在表示“早餐”、“午餐”、“晚餐”等内容...
即使没有它,找出“什么时候开放”的查询也会像这样:
SELECT r.restaurant
FROM restaurant_hours AS rh
INNER JOIN restaurants AS r rh.restaurant_id = r.id
WHERE rh.day_of_week = DAYOFWEEK(@theWhen)
AND rh.opens_at < TIME(@theWhen)
AND rh.ends_at > TIME(@theWhen)
;
关于php - mySql 使用键连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866327/