FullCalendar和MySQL - 优化我的查询

时间:2012-03-22 05:29:22

标签: php mysql

我有一个关于我以前在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)同时不查询过去的每一个其他事件?

希望有办法做到这一点!非常感谢任何意见。

2 个答案:

答案 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();

这似乎只会拉动尚未结束的事件。