1

我有一个 SQL 数据库搜索,目前有一个搜索词和一个地址输入 - 由谷歌对 lat/lng 进行地理编码。现在,我首先根据与搜索词的相关性对结果进行排序,然后根据静态半径(7 英里)按距离排序。

我遇到的问题是,如果您在“中央公园”附近搜索“乔·史密斯”,布朗克斯区(静态 7 英里内)可能会出现一个“乔·史密斯”作为第一个结果,而不是所有乔和实际上在中央公园的史密斯。有没有办法根据搜索区域的大小自动更改当前的静态搜索半径,以便它适用于纽约市,甚至纽约州?或者这个问题有更好的解决方案吗?

我想我想做的是模仿谷歌地图上的搜索,这样我就可以首先进行最相关的搜索,但在实际搜索的区域中。任何帮助都将不胜感激,甚至我应该采取一些不同的方法。谢谢!

4

1 回答 1

1

假设您有列和name,您可以执行以下查询以获取按距离排序的结果:longitudelatitude

// Long/Lat of the geocoded address (In your case: Central Park)
$latitude = 40.771133;
$longitude = -73.974187;

$sql = "
SELECT 
    name,
    ((ACOS(SIN( ".$latitude." * PI() / 180) * SIN(latitude * PI() / 180) + COS(".$latitude." * PI() / 180) * COS(latitude * PI() / 180) * COS((".$longitude." - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 

FROM 
    yourtable 

WHERE 1 
    AND name like 'John%'

HAVING distance <=7
ORDER BY distance ASC
LIMIT 10";
于 2011-10-19T18:59:46.407 回答