Mysql递归查询/余弦球面定律

Mysql递归查询/余弦球面定律,mysql,recursion,trigonometry,haversine,Mysql,Recursion,Trigonometry,Haversine,我想从坐标(lat/lng)到mysql数据库中搜索最近的位置,我使用球面余弦定律搜索这些位置: SELECT onlycoord.id, locations.name, locations.ascii, locations.latitude, locations.longitude, locations.country, locations.elevation, locations.gtopo30, locations.timezone, (6371 * ACO

我想从坐标(lat/lng)到mysql数据库中搜索最近的位置,我使用球面余弦定律搜索这些位置:

SELECT onlycoord.id, locations.name, locations.ascii,
    locations.latitude, locations.longitude,
    locations.country, locations.elevation,
    locations.gtopo30, locations.timezone,
    (6371 * ACOS(
        COS( RADIANS( 48.48 ) ) *
        COS( RADIANS( onlycoord.latitude ) ) *
        COS(
            RADIANS( onlycoord.longitude ) -
            RADIANS( 2.20 )
        ) +
        SIN( RADIANS( 48.48 ) ) *
        SIN( RADIANS( onlycoord.latitude ) )
    )) AS distance
FROM onlycoord USE INDEX (coordinate)
    LEFT JOIN locations USE INDEX (id)
    ON (onlycoord.id = locations.id)
WHERE onlycoord.latitude BETWEEN (
    48.48 - ( 5 / 111 )
) AND (
    48.48 + ( 5 / 111 )
) AND onlycoord.longitude BETWEEN (
    2.20 - ( 5 / ABS( COS(
        RADIANS( 48.48 )
    ) * 111 ) )
) AND (
    2.20 + ( 5 / ABS( COS(
        RADIANS( 48.48 ) 
    ) * 111 ) )
)
ORDER BY distance ASC
LIMIT 0, 20
其中6371是地球半径(km),111(km)是纬度的1°,cos(纬度)*111(km)是经度的1°,5(km)是搜索半径

问题:我希望至少找到8个城市,但对于浓缩区(许多城市),5公里半径很小但很快,因此如果我对浓缩区使用
搜索半径
太大,则查询速度很慢(许多结果:按顺序),但对于非浓缩区,
搜索半径
太小,无法找到至少8个城市

如果找到的城市数<8(仅使用mysql),如何进行递归查询,自动增加
搜索半径(x2)


谢谢,MySQL不支持递归查询

您必须根据上一个查询的结果进行新查询


顺便说一句,对于空间查询,我推荐一个。

所以现在我继续使用这个查询,如果找到的城市数<8(来自PHP),我会调用它。在接下来的几周里,我将检查MySQL空间扩展以比较它们(性能)。