Mysql
 sql >> Base de données >  >> RDS >> Mysql

recherche de proximité par code postal php/mysql

Voici le meilleur moyen que j'ai trouvé. Bien sûr, il faudra que vous ayez tous vos codes postaux lat/lon encodés dans la base de données.

// get all the zipcodes within the specified radius - default 20
function zipcodeRadius($lat, $lon, $radius)
{
    $radius = $radius ? $radius : 20;
    $sql = 'SELECT distinct(ZipCode) FROM zipcode  WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578)*cos('.$lat.'/57.29578)*(Longitude-'.$lon.')*(Longitude-'.$lon.'))/180) <= '.$radius.';';
    $result = $this->db->query($sql);
    // get each result
    $zipcodeList = array();
    while($row = $this->db->fetch_array($result))
    {
        array_push($zipcodeList, $row['ZipCode']);
    }
    return $zipcodeList;
}

Vous devriez pouvoir simplement déposer cette fonction. Transmettez-lui le $lat et le $lon du code postal dont vous souhaitez connaître le rayon, incluez le rayon facultatif et récupérez une liste des codes postaux.

Vous pouvez très facilement modifier cela pour obtenir tous les utilisateurs dont le code postal est IN (radius_sql) et récupérer les utilisateurs de votre liste.

Bon codage !