这是我的桌子。
post_id meta_key meta_value
-------- -------- ----------
10 booking_from 2017-01-20
10 booking_to 2017-01-25
11 booking_from 2017-02-20
11 booking_to 2017-02-25
如果2017-01-22至2017-01-26有预订,我如何选择post_id。目前我在这个日期预订。
我想选择给定的日期是否使用SQL查询进行预订
答案 0 :(得分:1)
一种方法是通过post_id
汇总您的表格,并检查以确保booking_from
日期在'2017-01-22'
之前或之前booking_to
日期开启或在'2017-01-26'
之后。这里的一个技巧是使用MIN()
和MAX()
来识别日期和预订日期。
SELECT post_id
FROM yourTable
GROUP BY post_id
HAVING MIN(meta_value) <= '2017-01-22' AND
MAX(meta_value) >= '2017-01-26'
这将检查整个范围是否完全由预订覆盖。如果您想检查现有预订是否与此范围重叠,我们可以稍微将查询更改为以下内容:
SELECT post_id
FROM yourTable
GROUP BY post_id
HAVING MIN(meta_value) BETWEEN '2017-01-22' AND '2017-01-26' OR
MAX(meta_value) BETWEEN '2017-01-22' AND '2017-01-26'
以下是第二个查询的演示: