【发布时间】:2016-03-03 23:56:54
【问题描述】:
下面是从用户的纬度、经度和半径查找产品附近的查询..
我希望这个函数只是返回商店的 ID...但是查询似乎不起作用
SELECT
product_id
FROM
sm_products
WHERE
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1) AS distance <= $userRadius
ORDER BY
distance ASC
下面的查询正在运行..但 id 确实返回了我不需要的 ID 和距离...我只需要返回半径内的product_id
SELECT
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1)
AS distance,
product_id
FROM
sm_products
HAVING
distance <= $userRadius
ORDER BY
distance ASC
有什么帮助吗?
编辑(函数调用)
$params['product_id'] = $this->productsInRadius($userlat, $userlon, $radius);
【问题讨论】:
-
为什么查询返回两者都重要?处理数据时只需忽略该字段
-
@RamRaider :我已将函数调用添加到 Question.. 我怎样才能只检索选定的字段..
-
查询无效?发生什么了?一个错误?一个空的结果集?
-
@JonStirling : 它返回一个错误'检查与您的 MySQL 服务器版本相对应的手册,以获得在 AS 附近使用的正确语法'
-
@SharanMohandas 那么问题可能是
AS distance我不认为在WHERE子句中有效。
标签: php mysql google-maps geo