sql >> Database >  >> RDS >> Mysql

mySQL selecteer postcodes binnen x km/mijlen binnen het bereik van y

Je moet iets gebruiken dat de Haversine-formule wordt genoemd :

$sql = "
    SELECT zipcode
    FROM zipcodes
    WHERE ".mysqlHaversine($lat, $lon, $distance)."
";

En de formule:

function mysqlHaversine($lat = 0, $lon = 0, $distance = 0)
{
    if($distance > 0)
    {
        return ('
        ((6372.797 * (2 *
        ATAN2(
            SQRT(
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) *
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) +
                COS(latitude * (PI()/180)) *
                COS('.($lat*1).' * (PI()/180)) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2)
                ),
            SQRT(1-(
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) *
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) +
                COS(latitude * (PI()/180)) *
                COS('.($lat*1).' * (PI()/180)) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2)
            ))
        )
        )) <= '.($distance/1000). ')');
    }

    return '';
}

Meestal gebruik ik geen code zonder eerst te begrijpen hoe het werkt, maar ik moet bekennen dat deze functie me een beetje te boven gaat...



  1. Hoe voeg ik een reeks waarden in verschillende kolommen van een mysql-tabel in?

  2. Hoe SQL Server te installeren op Ubuntu 18.04

  3. Draaitabel met MySQL

  4. Hoe JSON-gegevens op te slaan in MySQL