ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL计算距离(简单解决方案)

2019-07-21 20:14:43  阅读:124  来源: 互联网

标签:mysql select


我有下一个查询来获取给定距离内的地址和给定的邮政编码.基于经度和纬度数据计算距离.

在这个例子中,我已经将用户输入替换为仅值(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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有