得到下一个即将到来的游戏,在星期一显示

时间:2012-04-27 12:49:56

标签: php mysql

星期六会有比赛,但不是每个周末都有比赛。如果星期六之后有即将推出的游戏,我想在新的一周展示。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

从那里,只需选择日期等于$nextSaturday->format('Y-m-d')的位置即可找到下周六的游戏(如果有的话)。

答案 1 :(得分: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

尽管效率相当低,因为即使没有必要,总是运行查询 - 最好让应用程序仅在星期一执行

在这种情况下,你最好使用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
}