我有下一个查询来获取给定距离内的地址和给定的邮政编码.基于经度和纬度数据计算距离.
在这个例子中,我已经将用户输入替换为仅值(lat = 52.64,long = 6.88 en desired distance = 10km)
查询:
SELECT *,
ROUND( SQRT( POW( ( (69.1/1.61) * ('52.64' - latitude)), 2) + POW(( (53/1.61) * ('6.88' - longitude)), 2)), 1) AS distance
FROM lp_relations_addresses distance
WHERE distance < 10
ORDER BY `distance` DESC
Run Code Online (Sandbox Code Playgroud)
将未知列距作为错误消息.当我离开where clausule时,我得到了表的每个记录,包括他们计算的距离.在这种情况下,我必须获取整个表.
我如何才能获得所需的记录?
提前感谢您的任何评论!
您不能从sql语句的另一部分引用select子句中的别名.您需要将整个表达式放在where子句中:
WHERE
ROUND( SQRT( POW( ( (69.1/1.61) * ('52.64' - latitude)), 2)
+ POW(( (53/1.61) * ('6.88' - longitude)), 2)), 1) < 10
Run Code Online (Sandbox Code Playgroud)
更清洁的解决方案是使用子查询生成计算数据:
SELECT *, distance
FROM (
SELECT *,
ROUND( SQRT( POW( ( (69.1/1.61) * ('52.64' - latitude)), 2)
+ POW(( (53/1.61) * ('6.88' - longitude)), 2)), 1) AS distance
FROM lp_relations_addresses
) d
WHERE d.distance < 10
ORDER BY d.distance DESC
Run Code Online (Sandbox Code Playgroud)
演示:http://www.sqlize.com/q96p2mCwnJ