【问题标题】:holidays in mysql for multiple stores多个商店的mysql假期
【发布时间】:2014-01-12 19:58:27
【问题描述】:

我在 MySQL 数据库中有一个包含商店和日期的表。我需要检查商店那天是否营业。

在使用此方法检查商店是否营业之前: Find next time business is open; mysql hours calculation我要先看看这家店是不是放假了再看看有没有营业。

有一张桌子好不好:

店铺编号 |天数

xxx |数字,数字,数字等。

应用程序(用 PHP 编写)查询是否 [yday] 包含在 Days 字符串(逗号分隔值字符串)中? Shop ID 将是 Shops 表中的外键,应用程序将始终提前知道要为哪些商店运行此查询,而不是相反。

到目前为止,我还没有发现任何计算上便宜或优雅的解决方案。这可能是一个非常简单的问题,但解决方案太多了,我很难弄清楚不同的性能问题。

编辑 1

还考虑到查询的性能影响如下,将@GordonLinoff 答案视为最佳解决方案:

$ShopId = //a POST or GET 
$day = //a POST or GET

$query = mysqli_query($con,"SELECT day FROM table WHERE ShopId = '$ShopId' AND day = $day");

if(mysql_num_rows($query)== 0){
   echo "Shop open";
}
else{
 echo "Shop closed";
}

mysqli_close($con);

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您将拥有一张桌子,每家商店和每个假期都有一行。所以一行是:

    ShopId Day
    xxx    number
    xxx    number
    xxx    number
    

    然后,您可以使用 SQL 轻松检查此表中的包含情况。而且,如果您在(ShopId, Day) 上有一个索引,那将非常有效。

    【讨论】:

    • 抱歉,如果我利用您的知识。什么时候为每个商店创建表格代表一个问题(假设有数千家商店)?还有,我为什么要在两列上都建索引,而不是只在当天建索引,毕竟整张桌子上的店铺ID是完全一样的。
    • 您将创建一张桌子,而不是每个商店一张桌子。
    • 您不会为每个商店创建表格。您创建一张表。如果您不了解数据库规范化,我听说过《为凡人设计数据库》这本书的好消息。
    • @TimDearborn 。 . .我没有意识到原来的措辞是模棱两可的。一张桌子就是你想要的。
    • @GordonLinoff 我已经更新了我的问题。我误解了你的回答,我很惊讶。一张桌子有意义。考虑到问题中的查询,性能是最好的吗?然后我们可以解决这个问题。
    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多