0

周六会有比赛,但不是每个周末。如果下周六有即将到来的比赛,我想在新的一周展示。

如果我们在前星期一,我正在考虑这样的事情来提前 6 天检查,如果星期六有比赛,它应该找到它。但当然它缺少部分,只是一个开始,但我卡住了。至于现在它会找到 1 个月后的下一场比赛,它应该只显示那周是否有比赛。

"Select * From games Where date > DATE_ADD(CURDATE(),INTERVAL 6 DAY)"
4

2 回答 2

0

您可以使用 PHP 的DateTime类来查找下周六的日期:

$nextSaturday = new DateTime('next Saturday');

从那里,只需选择日期所在的位置,$nextSaturday->format('Y-m-d')即可找到下周六的比赛(如果有)。

于 2012-04-27T12:58:33.990 回答
0

您要让数据库获取的是“未来 6 天内的所有游戏”真的

SELECT * FROM `games` WHERE `date` >= CURDATE()
AND `date` <= DATE_ADD(CURDATE, INTERVAL 6 DAY)

...或者您可以使用BETWEEN...

SELECT * FROM `games` WHERE `date` 
BETWEEN CURDATE()
AND DATE_ADD(CURDATE(), INTERVAL 6 DAY)

[编辑]

刚刚弄清了问题标题中“在星期一显示”的含义……您实际上只想在星期一执行查询:)

因此,您要么只想在星期一运行查询(在应用程序级别完成),要么在其中运行查询,AND DAYOFWEEK(CURDATE()) = 2这样它就像

SELECT * FROM `games` WHERE `date` >= CURDATE()
AND `date` <= DATE_ADD(CURDATE, INTERVAL 6 DAY)
AND DAYOFWEEK(CURDATE()) = 2

尽管这样的效率相当低,因为即使不需要,您也会始终运行查询 - 最好让应用程序只在 Mondays 执行它

在这种情况下,您最好使用 drrcknlsn 的解决方案,使用 PHP 的DateTime对象并执行类似的操作(或将整个事情整合到 Cron 作业中):

if(date("N") == 1) {
  $oNextSaturday = new DateTime('next Saturday');
  $sFetchUpcomingGames = "SELECT * FROM `games` WHERE `date` = '{$oNextSaturday->format('Y-m-d')}'";

  //execute the database query and perform relevant outputs, and so on
}
于 2012-04-27T13:12:44.003 回答