Проблема с выводом двух периодов дат

Pustota

Новичок
Проблема с выводом двух периодов дат

Есть конкретная проблема. Есть две таблицы.
1. С полями id, startdate1, enddate1
2. С полями id, startdate2, enddate2

В них хранятся какие-то произвольные периоды. Нужно вывести id из первой таблицы там, где периоды startdate и enddate пересекаются в двух таблицах.
То есть, если в первой 01.02.2006 и 05.02.2006, а во второй 31.01.2006 и 04.02.2006 startdate и enddate соответственно, то условие выполнялось бы.
А также если в первой 01.02.2006 и 05.02.2006, а во второй 31.01.2006 и 10.02.2006 тоже.
Каким запросом можно это вывести?
Заранее спасибо.
 

SunDrop

Помощник поисков. робота
Попробуем устранить проблему.
Пойдем от противного.
Когда периоды НЕ пересекаются?
В 2-ух случаях. Когда "enddate2 < startdate1" (второе событие заканчивается раньше, чем началось первое) и "enddate1 < startdate2" (первое событие заканчивается раньше, чем началось второе).

Важная оговорка:
это в случае если у тебя во всех таблицах startdate меньше enddate. Если нет - это тоже не страшно. Воспользуешься функциями min и max.

А тебе нужно когда ПЕРЕСЕКАЮТСЯ.
Инвертируем условие, получаем:
[sql]WHERE enddate2 > startdate1 OR enddate1 > startdate2[/sql]

Дальше SELECT допишишь?

-~{}~ 04.02.06 13:32:

Вместо периодов я назвал временной отрезок событием, но суть от этого не поменялась.
 

bkonst

.. хочется странного?...
SunDrop
Объяснить, почему то, что ты написал не будет работать, или сам закон де Моргана вспомнишь?
 

SunDrop

Помощник поисков. робота
bkonst
Тьфу ты. Самое имтересное, сначала AND написал, а потом чего-то в голову стукнуло и на OR исправил. Виноват.
Правильно:
[sql]WHERE enddate2 > startdate1 AND enddate1 > startdate2[/sql]
Еще раз извиняюся!

-~{}~ 04.02.06 13:47:

Или же так:
[sql]
WHERE NOT (enddate2 < startdate1 OR enddate1 < startdate2)
[/sql]
Тут вроде точно не ошибся.
 

Pustota

Новичок
Спасибо большоек, народ. а ещё подскажите, нужно enddate вычислить через добавление к startdate количество дней.
То есть, есть в таблице startdate=2006-02-01 и kolvoday=6.
И нужно чтобы в enddate выводилось 2006-02-07.
Пробовал такой запрос, но он к сожалению кривой и плохо с датами работает:
PHP:
SELECT startdate, kolvoday, DATE_FORMAT(SUM(startdate+daykolvo), '%Y-%m-%d') as enddate FROM la la la...
-~{}~ 04.02.06 22:19:

Всем спасибо, со всем разобрался.
 
Сверху