【问题标题】:Only run an SQL query during the week仅在一周内运行 SQL 查询
【发布时间】:2020-07-01 12:08:25
【问题描述】:

我知道如何根据日期对数据库运行 SQL 查询,但是如何让我的服务器仅在特定时间或特定日期运行该查询?

我有一个带有活动的 SQL 数据库(编辑:这些活动将作为数字标牌显示在监视器上,因此无需任何用户输入)。有些活动在每个工作日进行,有些则只在特定的一天进行。我将每天的活动设置为具有相同的日期 - 1900-01-01 - 目前我有一个始终显示这些条目的 SQL 查询,以及另一个只显示当前日期的条目的查询:

<tbody>
   <?php
            require_once('../include/dbconn.php');
            $result = $conn->prepare("SELECT * FROM daily WHERE Date_For='1900-01-01' ORDER BY id ASC");
            $result->execute();
            for($i=0; $row = $result->fetch(); $i++){


    ?>
            <tr>
                    <td><label><center><?php echo $row['Child']; ?></center></label></td>
                    <td><label><center><?php echo $row['Activity']; ?></center></label></td>

            </tr>
            <?php } ?>





    <?php
            require_once('../include/dbconn.php');
            $result = $conn->prepare("SELECT * FROM daily WHERE DATE(Date_For) = CURDATE() ORDER BY id ASC");
            $result->execute();
            for($i=0; $row = $result->fetch(); $i++){

    ?>
            <tr>
                    <td><label><center><?php echo $row['Child']; ?></center></label></td>
                    <td><label><center><?php echo $row['Activity']; ?></center></label></td>

            </tr>
            <?php } ?>
    </tbody>

我知道我可以将日常活动添加到它们实际运行的日期中,并在数据库中添加一个时间方面,但我只是想检查是否有一种方法可以编写一组代码来规范访问,而不是增加数据输入的工作量?

【问题讨论】:

  • 如果您只希望某些代码在特定时间运行,那么要么 a) 检测代码执行的当前日期,并决定是否继续,要么 b) 控制代码执行的时间表示 Cron 作业或计划任务。
  • 但是我觉得这个要求还是有点不清楚吧?您是否希望它仅在今天发生时才从查询中返回活动? (如果是这样,为什么 - 人们不能搜索明天发生的事情,而是?)或者您只是不想在某些日子运行查询?不幸的是,您的措辞有点混乱。
  • 对不起,我错过了它是用于数字标牌的,所以人们无法搜索。您回复的第一部分“检测代码执行的当前日期,并决定是否继续”基本上就是我要问的。
  • 好的,所以在 PHP 中你可以很容易地得到当前日期。然后,如果您有一个列表,其中包含您希望它运行(或不运行,如果您愿意)的日期(例如一周中的几天或一个月中的几天,无论时间表需要是什么),您可以比较是否当前日期是否匹配其中任何一个。这有帮助吗?
  • 关于周末的好点子,我忘了你的“每天”活动只在工作日进行。 SELECT * FROM daily WHERE (Date_For='1900-01-01' AND DAYOFWEEK(CURDATE()) &lt;&gt; 1 AND DAYOFWEEK(CURDATE()) &lt;&gt; 7) OR Date_For = CURDATE() ORDER BY id ASC 应该处理这个问题。 (假设你在SQL中的文化设置是星期天是第1天,星期六是第7天。如果不是,请调整数字。现在如果今天是星期六或星期日,则不会从查询中返回“每天”的活动。更简单,更整洁(略)比在 PHP 中检测日期。

标签: php sql date


【解决方案1】:

您可以将两个查询合并为一个查询以提高效率,还可以在WHERE 子句中添加额外的部分,以确保在周末运行查询时不会显示“每个工作日”事件:

SELECT 
  * 
FROM 
  daily 
WHERE 
  (
    Date_For='1900-01-01' 
    AND DAYOFWEEK(CURDATE()) <> 1 
    AND DAYOFWEEK(CURDATE()) <> 7
  ) 
  OR Date_For = CURDATE() 
ORDER BY 
  id ASC

(假设您在 SQL 中的文化设置意味着星期日是第 1 天,星期六是第 7 天。如果不是,请调整数字。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多