我正在尝试通过"Open Till at least"
过滤器搜索场地。
我遇到的问题是,有些场地的工作时间为8AM
到6PM
,有些则从10PM
到3AM
。一个好的SO成员帮助我创建了这个代码,但当我尝试修改它以进行搜索时,我发现了一个问题。
如果我查询的是一个开放till at least 20:00
的场地,并且场地开放时间从11AM
到21:00
,那么一切都 ok 。
但如果我查询的营业时间为till at least 20:00
且营业时间从21:00
到03: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
基本上,我使用滑块来选择至少要打开场地的时间,并生成一个要发送的日期。
谢谢大家!
答案 0 :(得分:1)
严格地说,在21:00
和03: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
之后打开的地点。