MySQL - 如果过去午夜,从昨天获取数据

时间:2014-08-09 02:00:42

标签: php mysql sql

我有一个包含每日菜开放时间关闭时间的数据库。
我正在寻找的是一种检查时间是否在这些时间内的方法,例如:
开放时间: 14:00
结束时间:02:00 < - (请注意,过了00:00)

如果时间可能是从00:00到23:59,这个问题将非常容易解决(我只会检查当天的当前时间是否在这些时间内)。
但事实并非如此,因为这一天已经改变了,所以昨天的时间不会被检查,这意味着在02:00关闭的餐厅将不会被退回。

以下是我如何在PHP中声明日期开启/关闭时间的名称,用于查询:

$day_open = array('d1_o', 'd2_o', 'd3_o', 'd4_o', 'd5_o', 'd6_o', 'd7_o');
$day_close = array('d1_c', 'd2_c', 'd3_c', 'd4_c', 'd5_c', 'd6_c', 'd7_c');

// This is the name of the week days dishes
$dish_dd_array = array('d1_t', 'd2_t', 'd3_t', 'd4_t', 'd5_t', 'd6_t', 'd7_t');

$weekday = date('N'); // This returns 1 for monday, 5 for friday etc..
$current_time = date("H:i", time()); 

$query = mysql_query("SELECT {$dish_dd_array[$weekday-1]} FROM restaurants WHERE (({$day_open[$weekday-1]} < {$day_close[$weekday-1]} AND '{$current_time}' BETWEEN {$day_open[$weekday-1]} AND {$day_close[$weekday-1]}) OR ".
    "({$day_open[$weekday-1]} > {$day_close[$weekday-1]} AND ('{$current_time}' > {$day_open[$weekday-1]} OR '{$current_time}' < {$day_close[$weekday-1]})))");

查询有点长,所以我会在这里解释一下:
它只检查当前时间是否在数据库中当前开启/关闭时间内。如果是,它将返回菜肴。

只是为了澄清,如果时间范围在同一天的00:00和23:59之间,这段代码可以完美运行,但是我希望在24:00之后支持甚至时间,所以夜间餐厅也可以看到!

提前致谢,
通帕

2 个答案:

答案 0 :(得分:0)

如果结束时间

,我在这里做的是添加一个条件
  

AM PM

如果是AM,则结束时间是第二天的那个时间。当PM认为它是同一天。在同一天的AM中关闭时间非常 RARE

ELSE 您应该添加 FLAG (数据库中具有true或false值的列或您的设置文件中的列)以确定关闭时间是否在相同或第二天。

答案 1 :(得分:0)

请记住,午夜是我们仅仅是人类的利益的任意区分。在一个时间间隔内没有午夜这样的事情。因此,如果我们看到的时间是周一开盘时间或周二开盘时间之后,我们可以安全地假设它是在周一营业时间。你甚至不需要关闭时间。

WHERE   '{$current_time}' >= {$day_open[$weekday-1]} 
    AND '{$current_time}' < {$day_open[$weekday]})