返回未来的营业时间

时间:2013-02-20 20:00:26

标签: mysql

我正在尝试通过"Open Till at least"过滤器搜索场地。

我遇到的问题是,有些场地的工作时间为8AM6PM,有些则从10PM3AM。一个好的SO成员帮助我创建了这个代码,但当我尝试修改它以进行搜索时,我发现了一个问题。

如果我查询的是一个开放till at least 20:00的场地,并且场地开放时间从11AM21:00,那么一切都 ok

但如果我查询的营业时间为till at least 20:00且营业时间从21:0003:00,则会返回closed

如何显示仍然关闭的场地的营业时间?

这是我的代码:

SELECT
e.VENUE_NAME,
hrs.opening_day,
hrs.opening_time,
hrs.closing_time
FROM hours_of_operation hrs join venues e
  on hrs.venue_id = e.id
     and not is_closed
     and ((hrs.opening_day=date_format('$phpWhenDate' - INTERVAL (closing_time<opening_time and time('$phpWhenDate')<closing_time) DAY, '%a'))
          AND (closing_time<opening_time XOR
         (time('$phpWhenDate') >= least(opening_time,closing_time)
          and time('$phpWhenDate') < greatest(opening_time, closing_time))))

dataWhenDate看起来像这样:2013-02-21 04:00:00

基本上,我使用滑块来选择至少要打开场地的时间,并生成一个要发送的日期。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

严格地说,在21:0003:00之间打开的地点,在查询营业时间till at least 20:00时应该真正返回,因为它仅在21:00开放。如果我是用户,如果opening hours till at least 20:00会显示仅在21:00开放的地点,那么它实际上会误导我。

如果您想在20:00之后显示哪些地点已经开放,那么只需将20:00与场地的开放和关闭时间进行比较,如果其中任何一个大于20:00,那么在20:00之后打开(但您可能需要输入一个星号,向用户解释在20:00之后打开的地点包括20:00之后打开的地点。