如何在SQl查询中从给定时间段中选择预订

时间:2017-03-16 05:45:21

标签: mysql wordpress mysqli

这是我的桌子。

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查询进行预订

1 个答案:

答案 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'

以下是第二个查询的演示

Rextester