Помогите найти пересечение диапазонов(true,false)

korumbo1
Дата: 20.01.2013 14:11:54
Здравствуйте. Появилась одна задача,которую мне не под силу решить самому в силу недостаточности опыта в mysql. Задача следующая. Есть несколько полей в таблице (id,user_id,date_from(int 11),date_to(int 11)). В полях хранятся даты числами. Подается на вход 2 числа(int). для вставки в таблицу.Условия: записей одного пользователя не должно быть > 3 и заданый диапазон , который подаем на вход запроса(date_from(int 11),date_to(int 11)), не должна пересекаться с уже существующим на этого пользователя(user_id).
bochkov
Дата: 20.01.2013 14:25:23
Количество записей наверное сами вычислите, а вот пересечение периодов:
SELECT EXISTS(SELECT 1 FROM period_table p
WHERE date_from BETWEEN [p1] AND [p2]
UNION 
SELECT 1 FROM period_table p
WHERE [p1] BETWEEN date_from AND date_to)

p1 и p2 ваши числа
Добрый Э - Эх
Дата: 20.01.2013 20:42:40
korumbo1,

в общем случае диапазон (b1,e1) и (b2,e2) имеют пересечение (одну и более общих точек), если выполняется условие:
e1 >= b2 AND e2 >= b1
korumbo1
Дата: 20.01.2013 22:51:22
Понятно. Спасибо. Работает :)
korumbo1
Дата: 27.01.2013 17:45:58
bochkov,



Может поможешь еще дописать условие в соответствии с которым нужно не учитывать id=100 например
SELECT EXISTS(SELECT 1 FROM period_table p
WHERE date_from BETWEEN [p1] AND [p2]
UNION 
SELECT 1 FROM period_table p
WHERE [p1] BETWEEN date_from AND date_to) and id NOT IN (select id from period_table  where id=100)


, но эта строка все равно учитывается :(
bochkov
Дата: 28.01.2013 01:41:43
Добрый Э-Эх, правильно подсказал, поэтому надо его вариант отбора использовать
SELECT EXISTS(SELECT 1 FROM period_table p
WHERE date_to >= [p1] AND date_from <=[p2] AND id!=100))