【发布时间】: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()) <> 1 AND DAYOFWEEK(CURDATE()) <> 7) OR Date_For = CURDATE() ORDER BY id ASC应该处理这个问题。 (假设你在SQL中的文化设置是星期天是第1天,星期六是第7天。如果不是,请调整数字。现在如果今天是星期六或星期日,则不会从查询中返回“每天”的活动。更简单,更整洁(略)比在 PHP 中检测日期。