2015-08-19 3 views
0

Я разрабатываю приложение PHP + MySQL. У меня есть таблица, которая содержит дату начала и дату окончания периодов. Периоды могут перекрываться. Пример:Сплит перекрытие дат в разные записи

ID Start  End 
1 01/05/2015 31/05/2015 
2 01/06/2015 30/06/2015 
3 15/06/2015 25/06/2015 (this record overlaps record with ID 2) 
4 17/06/2015 22/06/2015 (this record overlaps records with IDs 2 and 3) 

мне нужно выбрать все записи, заказ от даты начала и окончания, но и разделить перекрывающиеся записи и держать их идентификаторы. Что я имею в виду, что мне нужно, чтобы получить это в конце концов:

ID Start  End 
1 01/05/2015 31/05/2015 
2 01/06/2015 14/06/2015 
3 15/06/2015 16/06/2015 
4 17/06/2015 22/06/2015 
3 23/06/2015 25/06/2015 
2 26/06/2015 30/06/2015 

Я могу это сделать, выбрав все периоды, а затем сортировка/разбивая их в PHP, но мне интересно, если я могу сделать это на уровне базы данных?

Может кто-то хотя бы указать мне в правильном направлении, пожалуйста?

ответ

0

Я думаю, что вам нужно это сделать PHP (или, возможно, процедуру db, но я бы не сделал это на слое db), это будет проще. Существует много сочетаний, которые вы должны учитывать, и они не могут вписываться в один оператор SQL.

Вот пример того, как обнаружить совпадения (по крайней мере, это то, как я могу вам помочь):

SELECT t1.id, t1.start, t1.id, t2.id 
FROM T t1, T t2 
WHERE (t2.start BETWEEN t1.start AND t1.end 
     OR t2.end BETWEEN t1.start AND t1.end) 
     AND t2.id > t1.id 

DEMO HERE

+0

Я хотел бы остаться в стороне от процедур БД, так как они слишком сильно отлаживать, если я сталкиваюсь с некоторыми ошибками. Я думаю, мне придется идти по PHP – Andy

+0

Точно, я тоже не поклонник отладки процедур БД. Таким образом, прикладной уровень является наилучшим подходом. –

Смежные вопросы