我有下一个查询来获取给定距离内的地址和给定的邮政编码.基于经度和纬度数据计算距离.
在这个例子中,我已经将用户输入替换为仅值(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
将未知列距作为错误消息.
当我离开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
更清洁的解决方案是使用子查询生成计算数据:
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
演示:http://www.sqlize.com/q96p2mCwnJ
标签:mysql,select 来源: https://codeday.me/bug/20190721/1495061.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。