sql >> Databáze >  >> RDS >> Mysql

mySQL dotaz na zeměpisnou délku a šířku pro další řádky v okruhu x mil

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í.




  1. VYŘEŠENO:Microsoft Office 365 verze 2009 může poškodit vaši databázovou aplikaci

  2. Aggregate String Concatenation v Oracle 10g

  3. Jedinečný identifikátor (guid) jako primární klíč v návrhu databáze

  4. je možné vybrat přímo EXISTS jako bit?