0

我有两张桌子:

venues

  • ID
  • 场地名称

hours_of_operation

  • 开放日(周一、周二、周三...)
  • 营业时间
  • 关闭时间
  • is_close (布尔值)

营业时间或营业时间通常介于两者之间10PM to 03AM,这意味着当我在星期二凌晨 1 点查看页面时,我仍然需要查看星期一而不是星期二的营业时间。

一位好成员帮我解决了这个问题,一切正常:)。然后我添加了一些代码,以便在何时显示“is_closedtrue关闭”文本。

然而,这样做的结果是......当一个场所在8PM当前打开时,3PM会返回文本“关闭”。即使场地尚未开放,我也希望它显示当天的关闭时间。


我还想知道是否可以将前一天的营业时间显示到凌晨 5:59,然后在早上 6:00 开始显示当天的营业时间。

示例:一个场地在星期一晚上 9 点到凌晨 4 点开放,所以我会看到该场地的关闭时间是从星期一早上 6 点到星期二早上 5 点 59 分,依此类推....除非它在星期一关闭,在这种情况下,文本为 '显示“已关闭”。

这是我的代码:

$fullDate = date('Y-m-d H:i:s');

SELECT
venues.ID,
venues.VENUE_NAME,
hrs.opening_day,
hrs.opening_time,
hrs.closing_time,
CASE WHEN (is_closed = 1 or is_closed is null)
       THEN 'closed' 
       ELSE closing_time END AS CLOSING_TIME_OR_CLOSED
FROM venues
LEFT JOIN hours_of_operation hrs
  on hrs.venue_id = venues.id
     and ((hrs.opening_day=date_format('$fullDate' -
           INTERVAL
             (closing_time<opening_time and time('$fullDate')<closing_time)
           DAY, '%a'))
          AND (closing_time<opening_time XOR
         (time('$fullDate') >= least(opening_time,closing_time)
          and time('$fullDate') < greatest(opening_time, closing_time))))

...然后我回应CLOSING_TIME_OR_CLOSED

谢谢!


编辑 请查看此架构

如您所见,第一个场地已关闭,显示器正确显示为“关闭”。然而,第二个是开放的,但仍然显示为关闭,因为设定的时间是14:30,而场地在 开放21:00。如果场地尚未开放,我想显示关闭时间而不是“关闭”。

另外,如果时间小于 06:00 AM,我想显示开放的场地,2013-01-29而不是2013-01-30一些场地开放到深夜。

4

0 回答 0