在使用 MySQL 执行基于邮政编码、经度和纬度的区域搜索时,我遇到了“问题”。但是一个国家内存在重复的邮政编码。
我目前正在执行第一个查询,以检查多个结果并选择第一个(因为它们的距离差异很小)。但我想在一个查询中完成。
有没有办法在使用 WHERE 时忽略多个匹配项,或者只是选择第一个匹配项。
这是我到目前为止所拥有的:
SELECT
u.name,
dest.zc_zip,
dest.zc_location_name,
ACOS(
SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
+ COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
* COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
) * 6380 AS distance
FROM zip_coordinates dest
CROSS JOIN zip_coordinates src
CROSS JOIN users u
WHERE src.zc_id = 2 /* searching for id */
AND u.zip = dest.zc_zip
AND u.city = dest.zc_location_name
HAVING distance < 100
ORDER BY distance;
在这里我想改成src.zc_id = 2
类似src.zc_zip = XXXX
编辑:
我还创建了一个 sql fiddle:http ://sqlfiddle.com/#!2/5fb6a/3