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

mySQL længde- og breddegradsforespørgsel for andre rækker inden for x mile radius

Her er den forespørgsel, jeg bruger på den butiksfinder, jeg arbejder med:

SELECT
    `id`,
    (
        6371 *
        acos(
            cos( radians( :lat ) ) *
            cos( radians( `lat` ) ) *
            cos(
                radians( `long` ) - radians( :long )
            ) +
            sin(radians(:lat)) *
            sin(radians(`lat`))
        )
    ) `distance`
FROM
    `location`
HAVING
    `distance` < :distance
ORDER BY
    `distance`
LIMIT
    25

:lat og :long er de punkter, som brugeren har bestået, hvor lat og long er de punkter, der er gemt i databasen.

:distancen måles i miles, i den fungerende version af koden trækkes :distancen faktisk fra en drop-down, der spænder fra 10-50 miles

Ændring af koden til at fungere med kilometer kan opnås ved at ændre 3959 (afstanden fra jordens centrum til dens overflade i miles) til 6371 (3959 miles konverteret til kilometer) takket være joshhendo for den løsning.




  1. Postgres adgangskodegodkendelse mislykkes

  2. Find rækker, der ikke indeholder numeriske data i Oracle

  3. SQL for at finde det første ikke-numeriske tegn i en streng

  4. Hvorfor er varigheden NULL for tilbagevendende begivenhed i Android?