2

我有一个查询,可以找到纬度/经度坐标对距离内的位置。这是一个填充了lat和值的示例:lng

SELECT 
    `id`, 
    ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) AS `distance` 
FROM `locations` 
HAVING `distance` < 0.100000

我的问题是我想在复合查询中使用它来过滤另一个查询的结果。例如:

SELECT * FROM `tickets` WHERE `location_id` IN ( <distance query goes here> );

但是,由于距离查询返回两列 (iddistance),第二个查询因违反基数而失败:ERROR 1241 (21000): Operand should contain 1 column(s)

有什么方法可以告诉 MySQL 避免从distance查询中返回列,以便只id返回一个 s 列表?

4

1 回答 1

3

典型的响应是构造一个与距离查询相同的查询,但从选择子句中删除距离列。

SELECT `id` 
FROM `locations` 
WHERE ( 3959 * acos( cos( radians('39.8657112') ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians('-86.1478729') ) + sin( radians('39.8657112') ) * sin( radians( `lat` ) ) ) ) < 0.100000

你看,我把整个计算移到了WHERE子句中,并针对你的限制器进行了测试。

于 2013-06-17T21:22:43.707 回答