2011-04-10 115 views
0

嗨,我需要的功能,使其在这个函数搜索年龄范围在MySQL和PHP

function search($query) { 

    $query = mysql_escape_string($query); 
    $connection = mysql_open(); 
    $statement = "select ID, UserName, Gender, USERDOB,DATEDIFF(USERDOB,now()) from Users "; 
    if (!empty($query)) { 
     $statement .= "where FirstName like '%$query%' " . 
        "or LastName like '%$query%' " . 
        "or UserName like '%$query%' " . 
        "or Gender like '%$query%' "; 
         } 
     $statement .= "order by id "; 

    $result = @ mysql_query($statement, $connection) 
    or showerror(); 

    $users = array(); 
    while ($user = mysql_fetch_array($result)) { 
     $user[4] = floor($user[4]/-1/364.25); 
     $users[] = $user; 
    } 

    // Close connection and return resulting array 
    mysql_close($connection) 
     or showerror(); 
    return $users; 
} 

这是搜索功能搜索的年龄范围。但它也可以查看一个人的年龄。年龄不存储在数据库中,但DOB是。所以它计算出来。我也正在使用一个聪明的模板。 mysql_open()是我自己的函数。我想我需要找到一种方法,让年龄进入查询,并与范围做一些事情...

反正相当失落,任何想法?

+1

什么的'364.25'点?我会理解'365.25'甚至'365.2425',但是'364.25'? – Gumbo 2011-04-10 10:56:16

回答

3

如果您在数据库中有DOB,并且您想查找与年龄范围相匹配的行,最简单和最有效的方法是将您的最小年龄和最大年龄转换为您的php中的DOB。然后您的查询将会是这样的:

SELECT * FROM USERS WHERE DOB > MIN_DOB AND DOB <= MAX_DOB; 

假设DOB是一个时间戳或日期或长。

1

您需要获取$ query的开始和结束年龄部分,然后将开始年龄和结束年龄转换为出生日期。

可以再加入

"OR dob BETWEEN '%$startdob%' AND '%$enddob%'" 

应该评估为类似或DOB BETWEEN '1980-01-01' 和 '1990-01-01'