2012-07-11 5 views
5

私は、誕生日がDATE形式(yyyy-mm-dd)で保存されているMySQLデータベースにユーザーを持っています。特定の年齢層に属するPHPを使用してデータベース内のユーザーを選択したいとします。特定の年齢の範囲内にいるすべてのユーザーを選択します

私が持っているものは、最低年齢(18歳)と最高年齢(21歳)です。私は自分の間で何かできることは知っていますが、問題は私が日付だけでなく日付を知っているということです。

私はこれをどうすればいいのですか?

これは私が現在やっているものです:

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

しかし、これは100%に動作しません:

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; 
} 

は、それから私はこれを行います。

18歳から21歳までのユーザーのみを選択するにはどうすればよいですか?

+0

を試してみてくださいあなたはインクルードが正しいことを確認するためにあなたの日付を印刷していますか? また、 'date( 'Ym-d'、strtotime(" - 18 years "));'または 'date( 'Ym-d'、strtotime(" - $ years年 "));' –

+0

Ofもちろん、それは100%動作しません - "年齢"が数字であるため、それは日付の形式ではありません。したがって、現在の「日付」を取って年齢を引くと、不正確な結果になります。 – alfasin

+0

alfasin ...それは私がleeftijden()関数で行うことです –

答えて

14

あなたは、単に右のクエリでそれを行うことができます。

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

このように、あなたは、日付文字列を構築するために、特別なPHPの機能を必要としません。単に数値を渡すだけで、MySQLはあなたを比較します。 BETWEENの番号が最初に高いことを確認してください。

+0

ありがとう、これは完璧に動作します! –

+0

すばらしい完璧なソリューション@Zane Bienあなたは私が必要とするこれに答えることができますhttp://stackoverflow.com/questions/12000537/display-count-base-on-the-grand-child –

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は使用していませんが、インデックスを使用できない –

+0

あなたは意味がありません... –

0

この

SELECT * FROM rijder WHERE DATEDIFF(NOW(), geboortedatum)/365.25 BETWEEN 18 AND 21 
関連する問題