2011-02-17 95 views
1

在我的數據庫中,我有一個設置生日的字段(例如1989.08.10(YYYY.MM.DD))。我也有將這個信息以正確的年份(例如17,22,30年)的功能。在搜索引擎我正在做我有從被用戶所需要的各種投入建立一個查詢,而其中兩個是年齡,MIN和MAX。例如,選擇18-25之間的青睞。(PHP)在數據庫中搜索年齡時提取正確的出生日期

我的問題是,我不知道我應該如何得到完成的結果,因爲我無法想象如何將它添加到查詢。我相信我會得把兩個WHILE循環某種程度上這將是這樣的最終結果了:

while($row = mysql_fetch_array($query){ 
$age = convertFunc($row['birthdate']); 
while(XXXXX){ 
SOME CODE HERE 
} 
} 

我很失去了這一點,但澄清。在數據庫的搜索查詢中,我想要的是類似於此的:SELECT * FROM users WHERE user = '$name' AND fromAge >= 18 AND toAge <= 25

這將選擇所有與MIN和MAX相應的年齡的字段。

+0

數據庫中的日期是DATE還是DATETIME字段類型? – Orbling 2011-02-18 00:06:54

回答

0

這就是爲什麼將所有日期保存爲時間戳而不是實際日期的原因,因爲在兩個數值之間找到範圍要容易得多。

你可以嘗試這樣的事情與你的當前設置找到18-25之間所有的人:

$age1 = 18; //These two would be external inputs from whatever search form 
$age2 = 25; 

$date1 = date("Y.M.d",time() - ($age1 * 365 * 24 * 60 * 60));//Subtract the number of seconds equivalent to X years from current timestamp, Convert timestamps to appropriate dates for the format in the DB 
$date2 = date("Y.M.d",time() - ($age2 * 365 * 24 * 60 * 60));//Strtotime("18 years ago") might work, not sure 

$sql = mysql_query("SELECT * FROM `users` WHERE `birthdate` >= '$date1' AND `birthdate` <= '$date2'"); 
$result = mysql_fetch_assoc($sql); 
1

嘗試類似。

select * from users where datediff(birthdate,now()) between date_add(now(),interval -15 years) and date_add(now(),interval -25 years)