2013-06-23 60 views
0

我有一個數據庫表userinfo。在該用戶信息表中有字段user_id,user_name,user_birth。MYSQL從數據庫中獲取即將到來的生日(UNIX時間戳)

我的目標是獲得即將到來的用戶生日,在我的情況下是6個下一個。我發現了同樣的事物的例子,但他們都使用了DATE-dbformat,這些例子不適合我,因爲在我的表中,user_birth的值是unix時間戳格式。

我將不勝感激,如果有人有一個示例代碼,它將如何可能。

我曾嘗試走出會是這樣的(當今天是23.06),其結果是:

  • 27.06邁克
  • 11.10史蒂夫
  • 23.10約翰
  • 25.12戴夫
  • 07.01安迪
  • 12.02馬克

這些將是23.06之後的6個生日,今年應該不會有問題。

在此先感謝。

回答

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戴夫」,但在此之後,當它跳到明年排序不再工作正確。 有沒有可能一些簡單的方法來解決這個問題? – user2514055

+0

@ user2514055。 。 。它應該在今年年底前完成包裝工作。你可以用一些數據顯示問題來搭建一個SQLFiddle嗎? –

相關問題