fast-je
@fast-je
Пишу на php.

Как лучше всего хранить дату рождения в таблице при постоянных выборках?

Есть вот такой запрос.
SELECT username, bdate FROM tb_users WHERE referer = 'admin' and DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), interval bdate+'4000' second),'%d.%m') = '09.12'

То есть получить всех юзеров у кого сегодня день рождения.
Понятное дело что индекс здесь не используется и читает иногда по 10к там допустим строк, что не есть хорошо.
Как здесь лучше всего поступить ?
Взять создать новое поле в котором хранить месяц и день и по нему уже искать ?
Или 2 поля, 1 месяц, 2 день ?
Вообщем подскажите как лучше и правильнее.
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
dyuriev
@dyuriev
A posteriori
Тип данных DATE чем вам не подходит?

Тип DATE используется для величин с информацией только о дате, без части, содержащей время.


Для получения текущей даты в mysql есть CURDATE();

вроде все максимально логично)

UPD: из комментариев к этому ответу:

можете задействовать виртуальные столбцы для месяца и даты, вычисляемые по полю с датой рождения и уже по ним индекс составить. MySQL это позволяет это делать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iResource
@iResource
Разработчик IR XML2Ozon
читает иногда по 10к там допустим строк

Это вообще немного, не причина для беспокойства.
А вот столько преобразований - пожалуй, не гуд.

Взять создать новое поле в котором хранить месяц и день и по нему уже искать ?

Вполне хороший вариант. При этом я бы сделал это поле числовым (int) поиск будет ещё быстрее.
Но, к примеру, число 0912 не сохранится 0. Можно добавить к месяцу и числу, допустим 10 (или 100). То есть искать 1922 (или 109112). Так можно именно Искать, а использовать из каждой найденной строки обычное старое поле.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы