Mysql 查找重叠或冲突的时间间隔

Mysql 查找重叠或冲突的时间间隔,mysql,sql,doctrine-orm,doctrine,dql,Mysql,Sql,Doctrine Orm,Doctrine,Dql,您好,我对mysql查询(DQL)有疑问 表: id| start | end | day ------------------------------- 1 | 10:00 | 11:00 | 03-05-2013 2 | 11:00 | 12:00 | 03-05-2013 3 | 10:30 | 12:00 | 03-05-2013 4 | 13:00 | 14:00 | 03-05-2013 5 | 14:00 | 15:00 | 03-05-2013 因此,我只想获取(列:id、

您好,我对mysql查询(DQL)有疑问

表:

id| start | end   | day
-------------------------------
1 | 10:00 | 11:00 | 03-05-2013
2 | 11:00 | 12:00 | 03-05-2013
3 | 10:30 | 12:00 | 03-05-2013
4 | 13:00 | 14:00 | 03-05-2013
5 | 14:00 | 15:00 | 03-05-2013
因此,我只想获取(列:id、start、end)在开始和结束之间具有相同部分的行。因此,我想得到:

id| start | end   
------------------
1 | 10:00 | 11:00 
2 | 11:00 | 12:00 
3 | 10:30 | 12:00 
因为第1行和第3行的时间在:10:30和11之间,第2行和第3行的时间在11:00到12:00之间

我希望能清楚地知道我想要什么作为输出。
如果能用doctrine的DQL语法得到答案,那就太好了。

您需要自行加入表并查找对之间的冲突

SELECT 
  t1.id,
  t1.start,
  t1.end
FROM table_name t1
JOIN table_name t2
WHERE
  t1.start < t2.end AND
  t2.start < t1.end AND
  t1.id <> t2.id AND
  t1.date = t2.date
选择
t1.id,
t1.开始,
t1.end
从表_name t1
联接表\u名称t2
哪里
t1.开始

您可以使用SELECT DISTINCT或GROUP BY来修剪输出中的重复项。

。为什么你不能得到第4行和第5行?这些行似乎满足与1和2相同的条件。因为第4行和第5行在时间上是独立的,所以在这些行的开始和结束之间没有其他行