2014-03-25 30 views
4

我知道我不是第一個問如何顯示即將到來的生日的人。但不幸的是,所有其他答案並沒有幫助我找到如何去做。如何顯示即將到來的生日?

我有以下結構的數據庫:

Id - Birthday 
1   9/14/1996 
2   8/27/1990 
--   -- 

正如你看到的,在生日字段誕生之日起保存。我想展示五個即將到來的生日(包括今天的生日)。

但我該怎麼做?我試過這個,但它沒有工作:

$query="SELECT Id 
    FROM participants 
    WHERE DATE_ADD(STR_TO_DATE(birthday, %n/%j/%Y), INTERVAL YEAR(CURDATE())-YEAR(STR_TO_DATE(birthday, %n/%j/%Y)) YEAR)"; 

感謝您的幫助!

回答

4

這個問題的關鍵是要訂購的東西,而不是使用where。這可以防止在一年結束時出現問題。

因此,邏輯是把一切誰MM-DD生日或當前日期後第一,其次是生日的休息日期順序:

select p.* 
from participants 
order by (case when date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d') >= date_format(now(), '%m-%d') 
       then 0 else 1 
      end), 
     date_format(STR_TO_DATE(birthday, %n/%j/%Y), '%m-%d') 
limit 5; 

編輯:

如果您需要轉換生日:

select p.* 
from participants 
order by (case when date_format(birthdate, '%m-%d') >= date_format(now(), '%m-%d') 
       then 0 else 1 
      end), 
     date_format(birthdate, '%m-%d') 
limit 5; 
+0

LOVED這個查詢.. so很多東西來學習這些答案:-) –

+0

謝謝,不幸的是一切都按ID(數據庫內容的順序)排序,而不是生日。也許是因爲Birtday領域是一個小文字領域?我應該先將它轉換爲Date嗎? – Jordy

+0

@Jordy。 。 。該問題將生日顯示爲日期字段。所以,是的,你應該把它轉換成日期。 –

1
select top 5 * 
from myTable 
where 
     month(dob) >= month(now()) 
    and day(dob) >= day(now()) 
order by dob asc 
+1

生日字段包含出生日期,而不是下一個生日的即將到來的日期。 – Jordy

+0

ya,ans更正,請檢查 – AK47

+0

[函數myname.getdate不存在] – Jordy

相關問題