php mysql 列名变量_PHP-使用列值作为MySQL的列名

我正在尝试使所有用户的半径都在5公里以内.这是我的表结构

id| location

-------------

1| 26.851791,75.781810

2| 26.860729,75.7633127

3| 34.057811,-84.239125

我写一个查询以根据纬度和经度分隔位置

SELECT SUBSTRING_INDEX( location, ',', 1 ) AS lat, SUBSTRING_INDEX( location, ',', -1 ) AS lng

FROM `users_test`

LIMIT 0 , 30

哪个工作正常,我得到如下结果

902ca944eed27658b05060f775a71a55.png

然后根据下面的博客,编写查询以获取所有位于5KM Radius中的用户.

SELECT *,SUBSTRING_INDEX( location, ',', 1 ) AS lat, SUBSTRING_INDEX( location, ',', -1 ) AS lng,(((acos(sin(("26.851791"*pi()/180)) * sin((`lat`*pi()/180))+cos(("26.851791"*pi()/180)) * cos((`lat`*pi()/180)) * cos((("75.781810"- `lng`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance

FROM `users_test`

WHERE distance >= "5"

但我收到以下错误.

#1054 – Unknown column ‘lat’ in ‘field list’

谁能告诉我我错了.

解决方法:

您不能在同一SELECT子句中引用列别名.您需要将其移动到子查询中.而且您不能在同一SELECT的WHERE子句中引用别名,您需要使用HAVING.

SELECT *, (((acos(sin(("26.851791"*pi()/180)) * sin((`lat`*pi()/180))+cos(("26.851791"*pi()/180)) * cos((`lat`*pi()/180)) * cos((("75.781810"- `lng`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance

FROM (SELECT *,

SUBSTRING_INDEX( location, ',', 1 ) AS lat,

SUBSTRING_INDEX( location, ',', -1 ) AS lng

FROM users_test) x

HAVING distance > 5

我强烈建议您修正表格设计,将纬度和经度放在自己的列中,而不必每次都用逗号分开.

标签:php,mysql

来源: https://codeday.me/bug/20191011/1895857.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值