Выбрать дни рождения за сегодня... есть несколько решений - какое правильнее

Сенсей

Новичок
Выбрать дни рождения за сегодня... есть несколько решений - какое правильнее

Скажем мне нужно выбрать юзеров у кого днюха сегодня...

Есть решение такое:

PHP:
select user_id, user_login from cms_users where DATE(user_birth_day)=CURDATE() order by user_id DESC;
И есть решение такое:

PHP:
select user_id, user_login from cms_users where DATE_FORMAT(user_birth_day, '%Y-%m-%d')=DATE_FORMAT(now(), '%Y-%m-%d') order by user_id DESC
По тестам с 3000 записей время выполения у обоих запросов примерно одинаковое... прыгает от 0.37 sec до 0.56 sec

Я понимаю что щас вы скажете юзай что тебе нравится...

Я так же понимаю что задача вобщем то решена - но с точки зрения правильности и логики "задача-реализация" что лучше юзать?

Может кто то еще как то реализовал это? У мускула много функций для работы с датой... чувтсвую здесь моими двумя способами не ограничицца....
 

SelenIT

IT-лунатик :)
Что-нибудь наподобие
PHP:
select user_id, user_login from cms_users where user_birth_day BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 DAY) order by user_id DESC;
чтобы использовать индекс по user_birth_day, если он есть.

P.S. Не проще ли сменить тип поля с DATETIME на DATE и тупо проверять на равенство?
 

Сенсей

Новичок
SelenIT
вот оно мое счастье :)
самое простое а я и не подумал... спасиб...
время выполнения уменьшилось в 5 раз.. ура :)
 
Сверху