使用MySQL表或PHP explode处理营业时间

4

我需要存储200多个独特企业的营业时间(数量还在增长中)。每个企业的营业时间都不同,有些还会在午餐时段关闭。此外,一个企业可能一天早上8点开门,而另一天早上9点才开门。我的初步想法是建立一个MySQL表来处理这个问题,但后来我考虑将其存储在单个单元格中并将结果分解开来。如果将其分解开来,我会像这样存储它...

// "8:00-17:00|9:00-18:00|8:30-12:30,13:30-17:30|8:00-17:00|8:00-17:00|8:00-11:00||"

// For Day Data:             Explode "|"
// For Open/Close Data:      Explode "-"
// For Converting to am/pm:  Explode ":"

使用单个单元格存储,可以对从 clientData 表中提取的数据进行数组处理(已经通过循环处理)。如果使用单独的 MySQL 表,则每个客户端需要 7-14 行数据(根据其构建方式而定),起始行数为 1,400 - 2,800 行。这两种方法哪种更好?您会如何处理呢?

谢谢!

<div class="businessHours" itemscope itemtype="http://schema.org/LocalBusiness">
    <time itemprop="openingHours" datetime="Mo 8:00-17:00"><strong>Monday:</strong> <span>8:00am-5:00pm</span></time>
    <time itemprop="openingHours" datetime="Tu 9:00-18:00"><strong>Tuesday:</strong> <span>9:00am-6:00pm</span></time>
    <time itemprop="openingHours" datetime="We 8:30-12:30,13:30am-17:30"><strong>Wednesday:</strong> <span>8:30am-12:30pm, 1:30pm-5:30pm</span></time>
    <time itemprop="openingHours" datetime="Th 9:00-18:00"><strong>Thursday:</strong> <span>9:00am-6:00pm</span></time>
    <time itemprop="openingHours" datetime="Fr 8:00-17:00"><strong>Friday:</strong> <span>8:00am-5:00pm</span></time>
    <time itemprop="openingHours" datetime="Sa 8:00-1:00"><strong>Saturday:</strong> <span>8:00am-11am</span></time>
    <time itemprop="openingHours" datetime="Su "><strong>Sunday:</strong> <span>Closed</span></time>
</div>

3
好的,你的问题很有意思,但是最终还是要靠你自己进行适当的研究,以确定如何解决它。当你在实施你的选择时遇到具体问题时,可以回来这里提问。 - George
就我个人而言,如果是我的话,我会选择你最初的方法。 - Strawberry
你是否需要使用这些数据作为连接、筛选、排序等的条件来执行任何类型的数据库查询? - Mike Brant
4
通常情况下,如果您要扩展存储在单个字段中的数据,应该将数据拆分为多个字段。此外,2800行不是很多,不应该成为问题。只要正确建立索引,数十万甚至数亿行都不会有问题。以上信息供您参考。 - user428517
是的,你不应该害怕拥有尽可能多的小表格(也就是说,只有少数列)来规范化你的数据。这正是关系型数据库的全部意义所在。 - user428517
显示剩余3条评论
2个回答

2

我一定会使用表格,你可以按照两种方式构建表格:

纵向表格: id,店铺ID,星期几,营业时间

横向表格: id,店铺ID,周一,周二,周三,周四,周五,周六,周日

每种方式都有优缺点,但是采用这种方法可以让你快速列出特定日期的所有店铺营业时间。否则,你需要解析每一行并将其爆炸到该天的位置,或者使用类似语句的税收。


这是一个非常好的观点。感谢您周到的回复。现在我只需要思考垂直与水平之间的区别。谢谢! - PaulP
1
我个人认为垂直更好。仅仅因为它给你更多的灵活性,而且查询更容易。但这只是我的观点。:D 如果我能以其他方式帮忙,请告诉我。 - John Petrilli
谢谢,约翰。我也倾向于垂直。我在想如果一个企业中午关门,我可以为第一组小时设置一行,为第二组小时设置另一行,然后在输出当天时按时间排序。否则,使用水平方式,我仍然需要在字段中限定时间并进行分解。 - PaulP
没错!祝你好运 :D - John Petrilli

1
我会在这里提出一个反对主流逻辑的论点。如果您不希望在将来的某个时候针对特定的营业时间数据进行查询,那么我建议整个数据集只是业务的属性,并可以以序列化方式存储。这将使每个企业的数据编写和检索更加优化(消除了跨多个表的更复杂的查询)。
我建议您也可以以序列化格式(例如JSON,或者PHP的本机序列化格式)存储数据,以便在检索时可以简单地反序列化数据并处理它。
现在,如果您确实认为需要查询营业时间信息(例如显示谁正在营业,谁在周六营业等信息),那么我建议采纳此线程上大多数其他评论者的建议并规范化数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接