Mysql
 sql >> Datenbank >  >> RDS >> Mysql

php/mysql-Postleitzahl-Näherungssuche

Hier ist der beste Weg, den ich gefunden habe. Natürlich ist es erforderlich, dass Sie alle Ihre Postleitzahlen mit Lat/Lon in der Datenbank verschlüsselt haben.

// 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;
}

Sie sollten in der Lage sein, diese Funktion einfach einzufügen. Übergeben Sie $lat und $lon der Postleitzahl, für die Sie den Radius haben möchten, schließen Sie den optionalen Radius ein und erhalten Sie eine Liste der Postleitzahlen zurück.

Sie könnten dies sehr einfach ändern, um alle Benutzer mit der Postleitzahl IN (radius_sql) zu erhalten und Ihre Listenbenutzer zurückzubekommen.

Viel Spaß beim Programmieren!