Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mySQL wybierz kody pocztowe w promieniu x km/mil w zakresie y

Musisz użyć czegoś, co nazywa się formuła Haversine :

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

I wzór:

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

Zwykle nie używam kodu bez wcześniejszego zrozumienia, jak to działa, ale muszę przyznać, że ta funkcja jest trochę przesadzona...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj punkty wielokąta mysql

  2. Błąd krytyczny:wywołanie niezdefiniowanej funkcji session_register()

  3. Znacznik czasu i daty w wierszu tabeli MySQL

  4. Okrągła data MySQL do początku tygodnia i miesiąca

  5. Przechowuj wszystkie zmiany danych ze wszystkimi szczegółami (np. Stackoverflow)