Запрос по кол-ву людей у которых день рождения

rolph

Новичок
Запрос по кол-ву людей у которых день рождения

Помогите пожалуйста, надо сделать запрос из БД, у кого сегодня ДР, будет и прошел.

Доковырялся до этого:

Код:
$res1=@mysql_query("Select * From worker Where to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))>=0 and to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))<15 order by to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year)),weight desc,name") or die('Error 1');
Таблица worker.
Дата в БД вида YYYY-MM-DD (формат DATE)
Поле с датой birthday

Заранее огромное спасибо
 

rolph

Новичок
Не работает запрос... Т.к. только потом понял, что получилось что он считает дату рождения с годом 0000.
А в БД год заполнен.
 

Андрейка

Senior pomidor developer
я не понял гениальный замысел твоего запроса, но .. вытащить число и месяц из даты, а также получить сегодняшнее число/месяц довольно просто.. не устраивает?
 

rolph

Новичок
Надо сделать 3 запроса:
1ый - У кого сегодня ДР
2ой - У кого будет , ближайшие 10 дней
3ий - Прошедшие ДР.

Немогу сделать правильно синтаксически.
А так, как понимаю:
1ый - дата рождения - currdate(), если она равна 0,всё ок
2ой - (currdate()+10) - дата рождения >0 и <=10
3ий - дата рождения - currdate(), если она меньше 0
 

Андрейка

Senior pomidor developer
тебе нужны списки этих акков или просто количество?

проблем сделать 1ый запрос вообще не вижу.. по сути получить и сравнить 2 числа(а то и меньше)
 

rolph

Новичок
Вообще нужны списки этих людей.

По поводу первого запроса. Проблема в том, я не понимаю как сделать.
Если считать to_days, то из-за года, может произойти большая разница.
Или надо каким-то образом откинуть год?
 

Фанат

oncle terrible
Команда форума
ну почему никто не читает документацию?
с готовыми ответами на их вопросы...
 

rolph

Новичок
Автор оригинала: Фанат
ну почему никто не читает документацию?
с готовыми ответами на их вопросы...
Очень даже читаем...

Такой вариант не верен?
(TO_DAYS(DATE_FORMAT(birthday,'%d-%m'))-TO_DAYS(DATE_FORMAT(currdate(),'%d-%m')))=0 [для тех у кого сегодня ДР]
 

rolph

Новичок
Автор оригинала: Андрейка
тебе за использование TO_DAYS® денег приплачивают?
А что, что-то не так? функция есть в мануале по mysql...

PS: Запрос у кого сегодня сделал, осталось у кого будет и было. Как сделать не знаю

Код:
select * from worker where DATE_FORMAT(birthday, '%m-%d')=DATE_FORMAT(now(), '%m-%d') order by birthday DESC
-~{}~ 13.12.06 14:31:

Вопрос решил сам. Тему можно закрыть.
1ый-сейчас:
select * from worker where DATE_FORMAT(birthday, '%m-%d')=DATE_FORMAT(now(), '%m-%d') order by birthday DESC

2ой-будут:
select * from worker where to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))>0 and to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))<=10 order by birthday DESC

3ий-прошли:
select * from worker where to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))<0 and to_days(date_sub(birthday,interval YEAR(birthday) year))-to_days(date_sub(curdate(),interval YEAR(curdate()) year))>-7 order by birthday DESC
 
Сверху