Mysql Помогите со сравнением дат MySQL

novi4ok

Новичок
всю эту колбасу - во where
не продукт её переработки, а её саму
Если вы про саму дату, то там год старый, а его надо заменить на текущий и только потом создать дату начала и дату конца, а потом сравнить с текущей и вывести. Это так, алгоритм, как я думаю.
 

Фанат

oncle terrible
Команда форума
я про всю эту колбасу. со всеми функциями и прочим. ЕЁ НАДО ЗАСУНУТЬ ВО WHERE
не дату, а все вычисления
 

Фанат

oncle terrible
Команда форума
если нужно это возвращать - то да.
а если нужно только для условий, то зачем вычислять в начале?
 

novi4ok

Новичок
Странно. И ошибок не показывает и не выводит ничего. :(
PHP:
SELECT hd_id
	  , hd_date
     , hd_datein
     , hd_dateout
     , hd_datein
     , hd_dateout
     , hd_name
     , hd_nametitle
     , hd_img
     , hd_imgalt
     , hd_link
FROM
  bd_name
  WHERE
  curdate() >= DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - 'hd_datein' DAY)
  AND 
  curdate() <= DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + 'hd_dateout' DAY)
 

novi4ok

Новичок
Уже ничего не понимаю... :(

Ничего не выводят и ошибку не показывает.
PHP:
SELECT bdname.*
FROM
  bdname
  WHERE
  curdate() BETWEEN DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + hd_datein DAY) AS indate
  AND DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - hd_dateout DAY) AS outdate
  
  
SELECT bdname.* 
	FROM bdname
		WHERE
DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + hd_datein DAY) AS indate <= curdate()<= DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - hd_dateout DAY) AS outdate

SELECT bdname.* 
	FROM bdname
		WHERE
		curdate()>=DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + hd_datein DAY) AS indate
		curdate()<=DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - hd_dateout DAY) AS outdate
При этом
PHP:
SELECT curdate()
	, bdname.hd_date
	, DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + hd_datein DAY) AS indate
	, DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - hd_dateout DAY) AS outdate
	FROM bdname
Даты показывает правильно.
Где же косяк??? :(
 

Фанат

oncle terrible
Команда форума
а ошибку никакую не пишет?
мне кажется, AS во WHERE не должно бы поддерживаться
 

novi4ok

Новичок
Пробовал и с AS и без него.
Ошибок нет и вывода нет.
Но, если сами даты выводятся корректно, то ошибка гдето именно в выражении сравнения.
 

novi4ok

Новичок
Всё. проблема решена. Пасиб, Фанат!!!
Ещё б с менюшкой разобраться. :)

PHP:
SELECT dbname.*
FROM
  dbname
  WHERE
  curdate() BETWEEN DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL + hd_datein DAY)
  AND DATE_SUB(DATE_FORMAT(hd_date, '2013-%m-%d'),INTERVAL - hd_dateout DAY)
 

novi4ok

Новичок
Фанат, ещё вопросик.

Возможно ли в MySQL прям в запросе поменять год на текущий?
Т.е. не создавать переменную в PHP, к примеру, $year=date("Y") и вставлять в запрос:
PHP:
WHERE
  curdate() BETWEEN DATE_SUB(DATE_FORMAT(hd_date, '$year-%m-%d'),INTERVAL + hd_datein DAY)
  AND DATE_SUB(DATE_FORMAT(hd_date, '$year-%m-%d'),INTERVAL - hd_dateout DAY)
, а чтоб сама менялась?

Заранее спасибо.
 

artoodetoo

великий и ужасный
novi4ok, а можете вообще избавиться от понятия ГОД? То есть от типа date.
 

artoodetoo

великий и ужасный
Я фантазирую, из бредовых идей может получиться наибольший профит :D

Не факт, что год надо брать из PHP. Вам год, как таковой, не нужен! Вам как раз надо из текущей даты взять день и месяц без года.

Главное -- вы сможете выкинуть этап приведения хранимой даты к текущему году. Тут у вас еще грабельки прикопаны, кстати, при переходе через НГ.
Тип можно выбрать char/varchar как 'ММ.ДД'. Либо int как M*100 + D, просто как вариант.
 
Сверху