所以...我的大脑出现故障 - 逻辑消失了,我感到沮丧!
我正在建造一个日历。我有一张约会表:
------------------------------------------------------------------------
| id | user_id | app_name | app_start | app_end |
------------------------------------------------------------------------
| 1 | 3 | Meeting | 2014-05-29 15:00:00 | 2014-05-29 17:00:00 |
------------------------------------------------------------------------
然后用户可以输入日期和时间,然后输入时间间隔。
让我们说用户选择2014-05-29,15:15并将时间间隔设置为+2小时。 这为我们提供了两个比较日期时间:
$start = '2014-05-29 15:15:00';
$end = '2014-05-29 17:15:00';
现在,我想在日历中选择所有约会"冲突"这两个日期时间。但是,不应选择以$ start结尾的约会,也不应选择以$ end开头的约会。
应该很容易,但我还没有把它钉死。我最终得到的问题是:
SELECT id, app_name
FROM appointments
WHERE user_id = ?
AND ((app_start BETWEEN '$start' AND '$end' AND app_start != '$end')
OR (app_end BETWEEN '$start' AND '$end')
OR (app_start > '$start' AND app_end > '$end'))
所以我要问的是:我的查询应该如何?
编辑:
根据我的问题的答案,工作查询是:
SELECT id, app_name FROM appointments
WHERE user_id = ?
AND ((app_start BETWEEN '$start' AND '$end' AND app_start != '$end')
OR (app_end BETWEEN '$start' AND '$end' AND app_end != '$start')
OR (app_start < '$start' AND app_end > '$end'))
答案 0 :(得分:0)
冲突约会应该是以下之一
在指定的时间范围内开始预约。
(app_start BETWEEN'$ start'AND'$ end'AND app_start!='$ end')
约会在给定的时间范围内结束。
app_end BETWEEN'$ start'AND'$ end'
约会在此时间之前开始,在结束时间之后结束。在您的情况下,您使用了pp_start&gt;第一个条件已经涵盖'$ start'bu tit。现在您正在寻找在结束时间之前和结束之后开始的约会。
(app_start&lt;'$ start'AND app_end&gt;'$ end')
SELECT id,app_name FROM appointmentments WHERE user_id =?和 ((app_start BETWEEN'$ start'AND'$ end'AND app_start!='$ end')或(app_end BETWEEN'$ start'AND'$ end')或(app_start&lt;'$ start'AND app_end&gt;' $端'))
答案 1 :(得分:0)
这是查找冲突约会的简单方法:
SELECT id, app_name
FROM appointments
WHERE user_id = ?
AND app_end > '$start'
AND app_start < '$end'