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歳のユーザーのみを選択するにはどうすればよいですか?

4

4 に答える 4

14

クエリで簡単に実行できます。

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

この方法では、DATE 文字列を作成するために特別な PHP 関数は必要ありません。数値を渡すだけで、MySQL が比較を行います。大きい方の数字が最初に来るようにしてBETWEENください。

于 2012-07-11T08:05:59.583 に答える
4

これを試して :::

Select * from table where (DATEDIFF(dob, DATE(NOW())) / 365.25) between 18 and 21
于 2012-07-11T08:07:12.583 に答える
2
SELECT * FROM rijder 
WHERE geboortedatum 
    between date_add(curdate(), interval -18 year) 
    and date_add(curdate(), interval -21 year)
于 2012-07-11T08:05:44.970 に答える
0

これを試して

SELECT * FROM rijder WHERE DATEDIFF(NOW(), geboortedatum)/365.25 BETWEEN 18 AND 21
于 2012-07-11T08:08:24.523 に答える