sql >> Database teknologi >  >> RDS >> Mysql

Forespørgsel inden for længde- og breddegrad i MySQL

Du bør søge efter Haversine-formlen, men en god start kunne være:

Citerer fra den første url:

Her er SQL-sætningen, der finder de nærmeste 20 lokationer, der er inden for en radius af 25 miles til 37, -122 koordinaten. Den beregner afstanden baseret på den pågældende rækkes bredde/længdegrad og målbredde/længdegrad, og beder derefter kun om rækker, hvor afstandsværdien er mindre end 25, sorterer hele forespørgslen efter afstand og begrænser den til 20 resultater. Hvis du vil søge efter kilometer i stedet for miles, skal du erstatte 3959 med 6371.

SELECT
    id,
    ( 3959
      * acos( cos( radians(37) )
              * cos(  radians( lat )   )
              * cos(  radians( lng ) - radians(-122) )
            + sin( radians(37) )
              * sin( radians( lat ) )
            )
    )
    AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;


  1. Hvad er forskellen mellem pg_table_size, pg_relation_size og pg_total_relation_size? (PostgreSQL)

  2. Returner dataene fra rækkerne med den seneste dato for hvert enkelt kandidat_id

  3. Er der en måde at se en forberedt forespørgsel, da den vil blive udført på databasen?

  4. 4 måder at erstatte NULL med en anden værdi i MySQL