我正在尝试完成此Google 教程的修改
我编写了这个 SQL 来使用位置“名称”查询位置表。给定位置的名称,查询返回附近的比萨餐厅。为了做到这一点,我交叉加入了我的餐厅位置表,标题为“标记”,并使用 Haversine 公式计算距离。
SELECT m.address,
m.name,
m.lat,
m.lng,
(3959 * ACOS(COS(RADIANS(poi.lat)) *
COS(RADIANS(m.lat)) *
COS(RADIANS(m.lng) - RADIANS(poi.lng)) + SIN(RADIANS(poi.lat))*
SIN(RADIANS(m.lat)))) AS distance
FROM markers poi
CROSS JOIN markers m
WHERE poi.address LIKE "%myrtle beach%"
AND poi.id <> m.id HAVING distance < 200
ORDER BY distance LIMIT 0,20
查询返回预期结果,但如果兴趣点在指定区域之外,在本例中为“默特尔海滩”,我每次匹配都会得到重复记录。这是因为 CROSS JOIN 很容易通过 DISTINCT 选择来修复。但是“lng”和“lat”字段是 FLOAT 类型,因此距离计算永远不会相同,即使对于重复记录也是如此。
这是回报的一个子集:
3901 North Kings Highway Suite 1, 默特尔比奇, SC | 芝加哥比萨公司以东| 33.716099 -78.855583 | 4.0285562196955125
1706 S Kings Hwy # A, 默特尔比奇, SC | 达美乐披萨:默特尔比奇 | 33.674881 | -78.905144 | 4.0285562196955125
82 Wentworth St, 查尔斯顿, SC | 安多利尼斯披萨 | 2.782330 | -79.934235 | 85.68177495224947
82 Wentworth St, 查尔斯顿, SC | 安多利尼斯披萨 | 32.782330 | -79.934235 | 89.71000040441085
114 Jungle Rd, 埃迪斯托岛, SC | Edisto Beach Inc 的雄鹿披萨 | 32.503971 -80.297951 | 114.22243529200529
114 Jungle Rd, 埃迪斯托岛, SC | Edisto Beach Inc 的雄鹿披萨 | 32.503971 -80.297951 | 118.2509427998286"
关于从这里去哪里有什么建议吗?