我有一个关于我以前在SO here上遇到的问题的后续问题。我想知道如何进一步优化/改进我的问题。
我的旧查询是:
-- OLD QUERY --
SELECT start, end, title, details, location
FROM event
WHERE (start >= 2012-02-26 00:00:00 AND end <= 2012-04-01 00:00:00)
AND user_id= $user_id;
此查询效果很好,因为从1月开始,它不会发生旧事件。因此查询快速而有效。 但是,它不适用于可能在下个月重叠的查询。 (假设一个事件有一个2012-11-29的“start_date”,但是2012-04-05的“end_date”。好吧,那么它没有被提入查询,因此没有显示。
所以,我的新查询最终成为:
-- NEW QUERY --
SELECT start, end, title, details, location
FROM event
WHERE (end > 2012-02-26 00:00:00 OR start < 2012-04-01 00:00:00)
AND user_id= $user_id;
但是,使用新查询,它最终会在02-26-2012之前拉出所有事件,从而使得它非常缓慢且无效。
如何优化此查询以实现这两个目标:
a)使其工作,以便将跨越一个月结束的事件收集到另一个月中? b)同时不查询过去的每一个其他事件?
希望有办法做到这一点!非常感谢任何意见。
答案 0 :(得分:1)
要查找重叠事件,请在查询中将OR
更改为AND
(稍微更改日期以仅与3月重叠):
WHERE (end >= '2012-03-01' AND start < '2012-04-01')
答案 1 :(得分:0)
您是否尝试在where语句中添加其他内容?
像
这样的东西SELECT start, end, title, details, location
FROM event
WHERE (end > $start OR start < $end)
AND user_id= $user_id AND $end >CURDATE();
这似乎只会拉动尚未结束的事件。