php - mySql 使用键连接表

标签 php python mysql

我有一个看起来像这样的表

+----+----------+------------
| 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 应该是 restaurantsFOREIGN KEYid,您可能想要一个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/

相关文章:

php - 从 MYSQL 表中选择包含周末的两列之间的日期的行

python - 检查字符串为 1, 0 否则打印字符串

MYSQL 集群 (NDB) 与 MongoDB

php - 选择列而不指定列名

php - 在 WooCommerce 上获取 Paypal 付款详情

PHP ZipArchive->close() 非常慢

php - Laravel 5.4 中的 Group By 替代方案

python - 上传应用程序时出错 Python Google App Engine

python - 设置默认单元格大小

java - 命名查询中的 Hibernate 错误