比较与MySQL
问题描述:
之间我有这样的查询比较与MySQL
SELECT *
FROM `reservations`
WHERE '2014-09-04' BETWEEN check_in AND check_out
在另一种情况下,多个日期,我需要这个CHECK_IN和CHECK_OUT场比较多个日期。此查询可以解决该问题
SELECT *
FROM `reservations`
WHERE '2014-09-04' BETWEEN check_in AND check_out
OR '2014-09-09' BETWEEN check_in AND check_out
但是,如果我有很多日期进行比较,则此查询效率不高。任何人都有解决方案使这个查询更短?
答
缩短查询:
SELECT DISTINCT r.*
FROM reservations r
JOIN (
SELECT '2014-09-04' AS dt UNION
SELECT '2014-09-09' AS dt
) dates ON dates.dt BETWEEN r.check_in AND r.check_out
答
如果您在check_in
和check_out
上没有索引,则使用or
的多个条件是最佳方法。如果你对这些列的索引和它们在第一种情况下被使用,那么请尝试使用union
:
SELECT *
FROM `reservations`
WHERE '2014-09-04' BETWEEN check_in AND check_out
UNION
SELECT *
FROM `reservations`
WHERE '2014-09-09' BETWEEN check_in AND check_out ;
注意union
即被删除重复的开销。我正在使用它,因为你可能在结果中有重复,并且大概你不需要它们。一般来说,我建议尽可能使用union all
。
+0
感谢您的解释 – l1th1um 2014-09-28 23:06:48
答
如果您需要检查重叠:
SELECT *
FROM reservations
WHERE '2014-09-04' <= check_out AND '2014-09-09' >= check_in
感谢您的解决方案 – l1th1um 2014-09-28 23:07:30