为了账号安全,请及时绑定邮箱和手机立即绑定

mysql用substring_index并用as lng和as lat后计算出来的结果是一样的?

mysql用substring_index并用as lng和as lat后计算出来的结果是一样的?

PHP
喵喵时光机 2019-03-14 11:16:25
SELECT substring_index(maps, ",", 1) AS lng,substring_index(maps, "," ,- 1) AS lat, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( 获取的纬度 * PI() / 180 - lat * PI() / 180 ) / 2 ), 2 ) + COS(获取的纬度 * PI() / 180) * COS(lat * PI() / 180) * POW( SIN( ( 获取的经度 * PI() / 180 - lng * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS juli FROM list ORDER BY juli ASC 代码如上,因为map里的经纬度是xx.xxxxx,xx.xxxxx这种形式显示的,我使用substring_index一个作为lng一个作为lat,但在计算过程中如果不加'就会显示Unknown column 'lat' in 'field list'如果加了'虽然可以显示,但显示的juli全是相同的数据,请问该如何解决呢? 想要实现的效果是juli的值不是相同的,而是经过当前位置经纬度与商家的经纬度计算后的结果。目前我用上面的代码,只能实现juli显示出来的值都是相同的...想要实现的效果如下... lng lat juli 分割出来的经度1 纬度1 1210 分割出来的经度2 纬度2 1215
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

已经解决啦,给以后遇到类似情况的朋友一个解决方法。


SELECT
    ROUND(
        6378.138 * 2 * ASIN(
            SQRT(
                POW(
                    SIN(
                        (
                            获取的纬度 * PI() / 180 - substring_index(maps, "," ,- 1) AS lat * PI() / 180
                        ) / 2
                    ),
                    2
                ) + COS(获取的纬度 * PI() / 180) * COS(substring_index(maps, "," ,- 1) AS lat * PI() / 180) * POW(
                    SIN(
                        (
                            获取的经度 * PI() / 180 - substring_index(maps, ",", 1) AS lng * PI() / 180
                        ) / 2
                    ),
                    2
                )
            )
        ) * 1000
    ) AS juli
FROM
    list
ORDER BY
    juli ASC

就是把substring_index(maps, "," ,- 1) AS lat这个直接放到计算里就好了。。。

查看完整回答
反对 回复 2019-03-18
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

为什么不到PHP封装一个方法呢

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 347 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信