2011-04-10 3 views
0

Hé les gars, je dois faire une fonction pour qu'il recherche une tranche d'âge dans cette fonctionRecherche d'âge dans 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; 
} 

Ceci est la fonction de recherche. Mais il permet aussi de voir un âge des personnes. L'âge n'est pas stocké dans la base de données, mais la date de naissance est. Donc, il calcule cela. J'utilise aussi un template smarty. mysql_open() est ma propre fonction. Je suppose que je dois trouver un moyen d'obtenir l'âge dans la requête et faire quelque chose avec la gamme ...

de toute façon tout à fait perdu, des idées?

+1

Quel est le point de '364.25'? Je comprendrais «365,25» ou même «365,2425», mais «364,25»? – Gumbo

Répondre

3

Si vous avez dans la base de données et que vous voulez trouver des lignes qui correspondent à une tranche d'âge, la chose la plus simple et la plus efficace est de convertir votre âge minimum et votre âge maximum en DOBs dans votre php. Alors votre requête serait quelque chose comme:

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

en supposant que DOB est un horodatage ou une date ou un long.

1

Vous devez obtenir les parties d'âge de début et de fin de $ query, puis convertir l'âge de début et l'âge de fin en dates de naissance.

Vous pouvez ensuite ajouter

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

qui devrait évaluer à quelque chose comme OU ENTRE DOB '1980-01-01' ET '1990-01-01'