Вы не понимаете что есть BETWEEN. И не понимаете работы операторов AND и OR. Например, "a between b and c" это просто "очеловеченная" запись условия "(a >= b and a <= c)". В доке об этом написано. А то, что у Вас что-то с чем-то совпало, это всего навсего частный случай. Хотите стать нормальным разрабом, изучайте мат.часть, - без неё никуда, к сожалению.
Ну, зря Вы так. Я может в sql не совсем просто силен, но на php лет 9 по10 часов в день отсидел точно. Прошёл так сказать путь от процедурного стиля до ОПП со всеми паттернами и абстракциями. Если Вам не сложно приведите правильный пример, как можно сократить данную запись, как видите мне не только нужно готовое работающее решение, а я пытаюсь действительно понять как лучше делать, что бы учиться. PS И не подумайте что я из тех кто ищет тупо готовое решение не вникая что да как, на форуме стараюсь спрашивать - когда действительно задолбался пробовать и читать доки в Инете. Как то так...
Если так, тогда Вам ничего не стоит описать словами это логическое выражение: Код (PHP): (`date_in` OR `date_out` BETWEEN '2015-10-01' AND '2015-10-31') Опишите.
Столбец date_in ИЛИ (OR ||) столбец date_out должен содержать значения: Больше или быть равным >= '2015-10-01' И (AND &&) Меньше ИЛИ быть равным <= '2015-10-31' Другими словами: Столбец date_in ИЛИ столбец date_out должен содержать значение даты в диапазоне дат ОТ '2015-10-01' ДО '2015-10-31'
Неправильно понимаете. Посмотрите ещё раз, что есть between, - скобки там поставлены не зря. И ещё раз опишите, с учётом.
Хз. Или я переработал уже, или у меня крыша поехала к е..ям. Ух простите за тупость. У меня нет вариантов.
Метод научного тыка ещё никто не отменял. Берём Ваше условие и переписываем на аналог: Код (PHP): (date_in OR (date_out >= '2015-10-01' AND date_out <= '2015-10-31')) Теперь сможете описать логику?
А как так можно значение сравнивать с выражением? Которое возвращает 0 или 1 (false true). Может в sql так можно? Это всё равно что написать на php: Код (PHP): $x1 = 300; $x2 = 40; if($x1 || ($x2 >= 0 && $x2 <= 100)) echo 'ОК'; Результат будет ОК. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Нет, я же говорю, Как не стыдно это не звучит. Подожду чел. из отпуска, может он мне объяснит, а то я чую весь форум уже "лежит".
ни стыдно. ни. Добавлено спустя 49 секунд: бля вот я пиздоглазое мудило, наборот же. или вообще везде ни?
Да что сразу мудило, доеду сам позже. Просто я не знаю у всех так или тока у нас - постоянно нету время что бы разобраться со всем нормально, постоянно куда то торопишься, просто охота лечь и ни думать вообще
Блин, чувак у тебя с одной стороны OR отдельное условие, отдельное выражение. И с другой. Они не связаны.
Думаю, тут другое. Или троль или человек никогда не был программистом, не смотря на утверждение "на php лет 9 по10 часов в день", - он не понимает работу логических операторов, что невозможно уже после пары дней изучения любого языка. Вероятнее всего, троль.
Блин Ваш вариант НЕ правильно отрабатывает! Этот правильно: Код (PHP): SELECT `id`, `id_box` FROM `orders` WHERE `id_box` = 32 AND ( ('2015-10-01' BETWEEN `date_in` AND `date_out`) OR ('2015-10-31' BETWEEN `date_in` AND `date_out`) OR (`date_in` BETWEEN '2015-10-01' AND '2015-10-31') OR (`date_out` BETWEEN '2015-10-01' AND '2015-10-31') ) Этот пиздит !!! Если указать в уже имеющийся диапазон. Код (PHP): SELECT `id`, `box` FROM `orders` WHERE `box` = 32 AND ( ('2015-10-01' BETWEEN `date_in` AND `date_out`) OR ('2015-10-31' BETWEEN `date_in` AND `date_out`) OR (date_in OR (date_out >= '2015-10-01' AND date_out <= '2015-10-31')) )
Да причём тут загрузил. Попробуйте в таблицу 2 строки забейте (date_in и date_out) - тип DATE: 1: 2015-10-08 - 2015-10-13 2: 2015-10-15 - 2015-10-20 Выполните Ваш запрос с диапазоном 2015-10-09 - 2015-10-12 С каких хренов то он 2 строки в результате выдаёт? Это конечно не критично, но и неправильно.
Функция date может быть полезна если столбец типа datetime, а сравнение нужно только по дате. В моём случае, даже если я "прикручу" date - результат будет тот же, так как тип date