0

在使用 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

4

1 回答 1

1

如果我正确理解你的问题,你想替换

WHERE src.zc_id = 2 /* searching for id */

符合以下内容:

WHERE src.zc_id = (SELECT ... FROM zip_coordinates where ...)

并且您希望 WHERE 子句的结果是单个值。在这种情况下,您可以只使用 MAX 功能。就像是:

WHERE src.zc_id = (SELECT MAX(zc_id) FROM zip_coordinates where ...)

如果您在此 SELECT 查询之前提供有关您正在运行的查询的更多信息以选择其中一个结果,将会很有帮助。

于 2013-08-06T15:39:59.753 回答