做距离时,我试图通过使用纬度/经度字段(CHAR)将我们的网站移开。这是我们目前的操作方式:
SELECT ID,( 6371 * acos( cos( radians(52.35462) ) * cos( radians( glinks_Links.Latitude ) ) * cos( radians( glinks_Links.Longitude ) - radians(4.88227) ) + sin( radians(52.35462) ) * sin( radians( glinks_Links.Latitude ) ) ) ) AS distance FROM glinks_Links
WHERE
(
((Latitude BETWEEN (52.35462 - 40/69.0) AND (52.35462 + 40/69.0)) )
AND
(Longitude BETWEEN (4.88227 - 40/42.5) AND (4.88227 + 40/42.5))
)
HAVING distance < 40 ORDER BY distance
...然后返回为>>
Showing rows 0 - 24 (1855 total, Query took 0.0288 seconds.)
然后是另一个实际上返回“距离”的版本(因为我们要按此排序,并且仅包括最接近的内容;]]
SELECT ID,st_distance_sphere(POINT(4.88227,52.35462), point_test) / 1000 AS distance FROM glinks_Links WHERE ( ((Latitude BETWEEN (52.35462 - 40/69.0) AND (52.35462 + 40/69.0)) ) AND (Longitude BETWEEN (4.88227 - 40/42.5) AND (4.88227 + 40/42.5)) ) HAVING DISTANCE < 100 ORDER BY distance LIMIT 100
给予:
Showing rows 0 - 99 (100 total, Query took 0.0237 seconds.)
然后似乎是最好的:
SELECT * FROM glinks_Links where st_distance_sphere(POINT(4.88227,52.35462), point_test)/1000 <= 100
显示第0-24行(共3439行,查询花费0.0015秒。)
不过,问题是-它没有为我提供距离!我想做的就是查询并抓住最接近的100个。有没有办法我可以做到这一点而又不牺牲速度呢?
做距离时,我试图通过使用纬度/经度字段(CHAR)将我们的网站移开。这是我们当前的操作方式:SELECT ID,(6371 * acos(cos(radians(52.35462))* cos(radians(...
请确保您在]上具有正确的综合索引>
create index my_idx ON glinks_Links (Latitude, Longitude, ID)
并且您不需要无用()来确定where条件(使用AND)