2013-06-23 3 views
0

У меня есть таблица базы данных userinfo. В этой userinfo-таблице есть поля user_id, user_name, user_birth.MYSQL Получите ближайшие дни рождения (временная метка unix) из базы данных

Моя цель - получить наступающие дни рождения пользователей, в моем случае 6 следующих. Я нашел примеры для таких же вещей, но все они использовали DATE-dbformat, и эти примеры не работают для меня, потому что в моей таблице значения user_birth находятся в формате timestamp в unix.

Буду признателен, если у кого-то есть пример кода для этого, как это можно было бы сделать.

В результате того, что я пытался выйти бы что-то вроде (когда сегодня является 23.06):

  • 27.06 Майк
  • 11,10 Стив
  • 23,10 Джон
  • 25,12 Dave
  • 07.01 Энди
  • 12.02 Оценка

Это будут следующие 6 дней рождения после 23.06, год не должен иметь значения.

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

ответ

1

Ну, используйте from_unixtimestamp(), чтобы получить его в формате даты/времени. Таким образом, запрос будет что-то вроде этого:

select * 
from t 
order by (case when month(date(from_unixtimestamp(user_birth))) = month(now()) and 
        day(date(from_unixtimestamp(user_birth))) > day(now()) or 
        month(date(from_unixtimestamp(user_birth))) > month(now()) 
       then 1 else 0 
      end) desc, 
     month(date(from_unixtimestamp(user_birth))), 
     day(date(from_unixtimestamp(user_birth))) 
limit 6 

Первая часть order by ставит более поздние сроки в первый год. Затем даты заказываются по месяцам и месяцам месяца.

+0

Благодарим вас за ответ/пример Гордона. Я немного исправил ваш запрос, чтобы он работал правильно. Проблема, которая приходит с запросом, заключается в том, что она дает правильные дни рождения только до конца текущего года. Так что в моем случае он работает корректно до «25.12 Dave», но после этого, когда он перескакивает на следующий год, сортировка больше не работает правильно. Может быть, есть какой-то простой способ исправить это? – user2514055

+0

@ пользователь2514055. , , Он должен работать для упаковки в конце года. Можете ли вы добавить SQLFiddle с некоторыми данными, показывающими проблему? –