Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
например есть диапазон дат: 2012-04-03 12:03:00(firstDate) - 2012-04-07 07:50:00(secondDate) = (п1).
пользователь вводит нужный ему диапазон дат: 2012-04-15 15:05:00 - 2012-04-27 17:00:00 = (п2).
как выбрать всю информацию которая находится в диапазоне п2, но не входит в диапазон п1?
я так понимаю для таких целей лучше использовать оператор between?
Неактивен
как выбрать всю информацию которая находится в диапазоне п2, но не входит в диапазон п1?
date NOT BETWEEN (п1) AND date BETWEEN (п2)
Вместо BETWEEN можно использовать и другие условия.
Неактивен
LazY написал:
как выбрать всю информацию которая находится в диапазоне п2, но не входит в диапазон п1?
date NOT BETWEEN (п1) AND date BETWEEN (п2)
Вместо BETWEEN можно использовать и другие условия.
но дело в том, что у меня два поля date & date2 как с учетом этих полей сделать запрос? У меня просто первый диапазон хранится в БД и он не в одной ячейке, а в двух
Отредактированно alexiy (06.05.2012 19:51:12)
Неактивен
Как условие звучит точно? (с участием имён колонок)
Неактивен
вот практический пример : допустим машина сдается на период с 2012-05-04 15:09(firstDate) до 2012-05-10 17:45(secondDate).
но с 2012-05-13 15:09 и 2012-05-16 17:45(эти даты ввел пользователь) она свободна и если пользователь ввел дату которая не входит в диапазон(2012-05-04 15:09 до 2012-05-10 17:45) она должна быть отображена
Неактивен
Тогда логика такая.
Чтобы диапазоны дат не пересекались, ни начальная, ни конечная дата периода, на который машина сдана, не должна попасть в интервал, который ввел пользователь:
firstDate NOT BETWEEN [то, что ввёл пользователь]
AND
secondDate NOT BETWEEN [то, что ввёл пользователь]
Некоторый недостаток такого запроса состоит в том, что с NOT не используются индексы, поэтому запрос можно переписать через < > - тогда есть шанс, что по одной из колонок индекс будет использоваться.
Если $max - бОльшая дата, которую ввел пользователь, $min - меньшая, то запрос примет вид:
(firstDate > $max AND secondDate > $max)
OR
(firstDate < $max AND secondDate < $max)
Неактивен
я пробовал такой вариант, но не получалось что-то у меня. хочу уточнить поле в БД имеет тип datetime а сравниваю я со строчной переменной. работаю с php и там получаю строку $firstDate = $date." ".$time; может в этом вся причина?
Неактивен
Ну это смотря как выглядят $date и $time. Переменная $firstDate должна иметь вид 2012-01-31 18:44:22
Неактивен
странно, она имеет такой вид
Неактивен
Покажите сам запрос. Полностью, со всеми подставленными php-шными переменными.
Неактивен
Неактивен
Осталось подставить переменные и вывести результат. echo ($sql), например.
Неактивен
так переменный подставлены, а как результат ничего не выводит
Неактивен
Вместо
Неактивен
SELECT cardata, country, class, transmission FROM cars LEFT JOIN (SELECT car FROM zakaz WHERE fdate NOT BETWEEN '2012-05-01 00:00' AND '2012-05-05 00:00' AND sdate NOT BETWEEN '2012-05-01 00:00' AND '2012-05-05 00:00' ) t ON cars.cardata = t.car WHERE t.car IS NULL
вот что он вывел
cкрин на структуры таблицы zakaz
http://s019.radikal.ru/i644/1205/95/53ecc0f41387.jpg
Неактивен
Не уверен, что проблема именно в этом, но секунд не хватает вместо '2012-05-01 00:00' стоит писать '2012-05-01 00:00:00'. Плюс скобки расставьте в условии WHERE.
Неактивен
а в чем тогда может быть проблема?
Неактивен
Давайте сперва убедимся, что проблема не в отсутствующих секундах и не отсутствии скоробок в WHERE - там будем дальше смотреть. Плюс приведите все же дамп таблиц cars и zakaz в форме http://sqlinfo.ru/forum/viewtopic.php?pid=27835#p27835
Неактивен
deadka написал:
Давайте сперва убедимся, что проблема не в отсутствующих секундах и не отсутствии скоробок в WHERE - там будем дальше смотреть. Плюс приведите все же дамп таблиц cars и zakaz в форме http://sqlinfo.ru/forum/viewtopic.php?pid=27835#p27835
перепроверли все и получается, что ступор происходит с LEFT JOIN в нем смысл такой, чтобы он отобрал из zakaz занятые машины на определенный период и отбросил бы их из таблицы cars
Неактивен
Не совсем понятно, проблема решилась?
Неактивен
deadka написал:
Не совсем понятно, проблема решилась?
нет, причина в LEFT JOIN что-то он не срабатывает как надо
Неактивен
Это крайне сомнительно, скорее запрос составлен некорректно. Приведите уже дампы таблиц и тот результат, который Вы хотите получить.
Неактивен
deadka написал:
Это крайне сомнительно, скорее запрос составлен некорректно. Приведите уже дампы таблиц и тот результат, который Вы хотите получить.
вот дамп таблицы zakaz
Неактивен
Да, была ошибка, нужно так:
Неактивен
Страниц: 1