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

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.4k
2 个回答

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


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这个直接放到计算里就好了。。。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题