2011-04-10 144 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'