2012-07-11 66 views
5

我有MySQL數據庫中的用戶,他們的生日以DATE格式(yyyy-mm-dd)存儲。我想選擇使用PHP的數據庫中的用戶,他們位於特定的年齡段之間。選擇一定年齡範圍內的所有用戶

我有什麼是最小年齡(18)和最大年齡(21)。我知道我可以用BETWEEN做點什麼,但問題是我只知道年代而不是日期。

有沒有人有關於如何做到這一點的建議?

這是我在做什麼目前:

function leeftijden($age) { 
    $morgen['day'] = date('d'); 
    $morgen['month'] = date('m'); 
    $morgen['year'] = date('Y') - $age; 

    $datum = $morgen['year'] .'-' .$morgen['month'].'-' .$morgen['day']; 

    return $datum; 
} 

那麼我這樣做:

$maxDatum = leeftijden(18); 
$minDatum = leeftijden(32); 
$sqlRijder = "SELECT * FROM rijder WHERE geboortedatum between '".$minDatum."' AND '".$maxDatum."'"; 

但是,這並不工作,100%。

我如何才能選擇年齡介於18至21歲之間的用戶?

+0

你打印您的日期,以確保是正確的? 你也可以做'date('Ym-d',strtotime(「 - 18 years」));''或'date('Ym-d',strtotime(「 - $ years years」));' – 2012-07-11 08:05:46

+0

Of當然它不會工作100% - 因爲「年齡」是一個數字,它不是以日期的格式。因此,採用當前的「日期」並減去年齡將得到不準確的結果。 – alfasin 2012-07-11 08:06:33

+0

alfasin ...這就是我在leeftijden()函數中做的 – 2012-07-11 08:12:17

回答

14

你可以簡單地這樣做是正確的查詢:

SELECT * 
FROM rijder 
WHERE geboortedatum BETWEEN 
    CURDATE() - INTERVAL 21 YEAR AND 
    CURDATE() - INTERVAL 18 YEAR 

這樣,你不需要特殊的PHP函數來構造一個日期字符串。只需傳入數字,MySQL就會爲您進行比較。只要確保更高的數字在BETWEEN第一。

+0

謝謝這個作品完美! – 2012-07-11 08:26:27

+0

偉大的完美解決方案@贊恩邊你能回答這個我需要它http://stackoverflow.com/questions/12000537/display-count-base-on-the-grand-child – 2012-08-17 06:36:34

2
SELECT * FROM rijder 
WHERE geboortedatum 
    between date_add(curdate(), interval -18 year) 
    and date_add(curdate(), interval -21 year) 
4

試試這個:::

Select * from table where (DATEDIFF(dob, DATE(NOW()))/365.25) between 18 and 21 
+1

沒有使用MySQL,但不會無法使用索引? – 2012-07-11 08:08:58

+0

你的意思是不可挑剔的... – 2012-07-11 08:20:00

0

試試這個

SELECT * FROM rijder WHERE DATEDIFF(NOW(), geboortedatum)/365.25 BETWEEN 18 AND 21