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

时间:2013-07-02 19:55:20

标签: 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,start,end)只有在start和end之间具有相同部分的行。因此,我希望得到:

id| start | end   
------------------
1 | 10:00 | 11:00 
2 | 11:00 | 12:00 
3 | 10:30 | 12:00 

因为第1行和第3行的时间介于:10:3​​0和11之间,而第2,3行的时间介于11:00到12:00之间

我希望很清楚我想要得到什么作为输出。 很高兴能在DQL语法中为doctrine获得答案。

1 个答案:

答案 0 :(得分:0)

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

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

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