性能mySql PHP-一周中的休息日

性能mySql PHP-一周中的休息日,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,运行此功能以检查一周中有多少天的业务已关闭,最快的方法是什么 $closingDaysCheck = mysql_query("SELECT * FROM businessClosingDays WHERE Bid='$Bid' LIMIT 1", $con); if($closingDaysCheck) { if(mysql_num_rows($closingDaysCheck) >0) { while ($closed = mysql_fetch_assoc(

运行此功能以检查一周中有多少天的业务已关闭,最快的方法是什么

$closingDaysCheck = mysql_query("SELECT * FROM businessClosingDays WHERE Bid='$Bid' LIMIT 1", $con);

if($closingDaysCheck) {
    if(mysql_num_rows($closingDaysCheck) >0) {
        while ($closed = mysql_fetch_assoc($closingDaysCheck)) {
            if((date("w", $finalDate) == 0) && ($closed[0] != 0)) { // SUNDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 6) && ($closed[6] != 0)) { // SATURDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 5) && ($closed[5] != 0)) { // FRIDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 4) && ($closed[4] != 0)) { // THRUSDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 3) && ($closed[3] != 0)) { // WEDNESDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 2) && ($closed[2] != 0)) { // TUESDAY
                $active = 'inactive';
            } else if((date("w", $finalDate) == 1) && ($closed[1] != 0)) { // MONDAY
                $active = 'inactive';
            } else {
                $active = 'active';
            }
        }
    }
} 
这是数据库,最后一天是星期天,已经关闭:

CREATE TABLE `businessClosingDays` (
  `Bid` varchar(40) NOT NULL,
  `1` tinyint(1) NOT NULL,
  `2` tinyint(1) NOT NULL,
  `3` tinyint(1) NOT NULL,
  `4` tinyint(1) NOT NULL,
  `5` tinyint(1) NOT NULL,
  `6` tinyint(1) NOT NULL,
  `0` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `businessClosingDays` VALUES('9', 0, 0, 0, 0, 0, 0, 1);
帕特里克,我已经按照你的建议测试过了。 最终我需要它来检查一个月内的所有日子。 我测试了1天,应该关闭。 我从mysql创建了一个数组。 我检查该日期的星期几是否在数组中,也就是说。但由于某些原因,它不起作用。 我做错了什么

$dateToCheck = 1327791600; // timestamp

$result = mysql_query("SELECT * FROM businessClosingDays WHERE Bid = '9'");
while ($closedDays = mysql_fetch_array($result, MYSQL_NUM)) {
echo $closedDays[0], $closedDays[1], $closedDays[2], $closedDays[3], $closedDays[4], $closedDays[5], $closedDays[6];
}

if (in_array(date("w", $dateToCheck), $closedDays)) {
echo "in it";
} else {
echo "not";
}

也许可以看看MySQL的。它可以返回与您的查询匹配的行数。

现在,我真的不明白“最快”是什么意思,因为在这一点上它可能只是微优化,但您可以从逻辑上更好地组织它

我会去掉所有的if-else条款。由于您对某一天的业务是否关闭感兴趣,您可以查看该天

然后,代码将如下所示:

// Remember to escape your queries to prevent SQL-injection!
$query = sprintf (
   'SELECT * 
    FROM businessClosingDays 
    WHERE Bid='%s' 
    LIMIT 1'
   mysql_real_escape_string($Bid, $con)
);
$closingDaysCheck = mysql_query($query, $con);
if($closingDaysCheck) {
    // We only need to calculate this once, not in multiple if-else clauses
    $finalWeekday = date("w", $finalDate);

    // Default is that the store is open, right? And a value of 1 
    //means it's closed:
    $active = 'active';

    // Try to fetch the result. Since we use LIMIT 1, we can have
    // at most 1 row, so get rid of the while-loop.
    $closedAt = mysql_fetch_assoc($closingDaysCheck);

    // Now, see if we have any information of when the store is closed
    // and if we do and the store is closed on this day, change the
    // value to 'inactive'
    if(!empty($closedAt) && $closedAt[$finalWeekday] == 1) {
      $active = 'inactive';
    }
} 

假设:我假设我们只关心商店是否在给定日期开张,即
$finalDate
而不是日期范围。如果此假设为真,那么
finalDate
不是所讨论变量的好名称。它应该被命名为类似于
dateToCheck
或类似的名称。

请告诉我们变量$finalDate是什么?嗨,扎夫,对不起,$finalDate是一个月中的每一天。基本上,这个脚本构建了一个javascript弹出日历。检查一个月的每一天是否是星期一、星期二,。。。如果星期天应该是关闭的,如示例中所示(因此数据库中的1)。然后,弹出窗口中的每一天都将处于“非活动”状态@zaf-1在没有理由的情况下要求“最快的方式”,原因是显而易见的。只要看看代码;o) @Col.shrapaneli想了解更多关于如何构建日历的上下文,以改进我的答案。你能为这个片段的上下文提供一些代码吗?也就是说,循环,函数调用whateverThanks,Patrick,对不起,我没有指定,我实际上要经历整个月。见顶部对Zaf的澄清;o) @PatrikAkerstrandAlso业务可能关闭超过1天,因此我们需要一段时间,或者创建一个包含一周所有关闭日数组的foreach。我测试了一个日期,但最终需要整个月。我创建一个数组,并检查数组中是否有日期。但似乎不起作用。我做错了什么?嗨,帕特里克,你有时间检查一个月内所有日子的整个for循环,看看一周中是否有关闭的日子。pastebin.com/TfVaEL6kHey Sebastian。恐怕还没有,我和家人都病了。我们现在正在康复。我希望能很快得到它。谢谢Orolin,我刚才在上面做了两个澄清,实际上,我不需要知道有多少天是不活动的,但哪些天是不活动的,从那以后我将根据结果构建一个弹出式日历。它像这样工作很好,但看起来不太好;o) @Orolin