Zde je dotaz, který používám na vyhledávači obchodů, se kterým pracuji:
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
a :long
jsou body, které uživatel předá, kde lat
a long
jsou body uložené v databázi.
:distance se měří v mílích, v pracovní verzi kódu je :distance ve skutečnosti vytažena z rozbalovací nabídky v rozmezí 10-50 mil
Změnu kódu pro práci s kilometry lze provést změnou 3959 (vzdálenost od středu Země k jejímu povrchu v mílích) na 6371 (3959 mil převedených na kilometry) díky joshhendo za toto řešení.