为什么此查询 return 的结果不是 0?
Why won't this query return results that are 0?
使用 haversine,以下查询查找坐标在输入坐标 10 英里半径范围内的所有行。
SELECT *
, ( 3959 * acos( cos( radians($locationLatitude) )
* cos( radians( endingLatitude ) )
* cos( radians( endingLongitude ) - radians( $locationLongitude ) )
+ sin( radians( $locationLatitude) )
* sin( radians( endingLatitude ) ) ) ) AS distance
FROM trips
HAVING distance < 10
ORDER
BY distance
LIMIT 0 , 10;
但是,它不会 return 行与输入的坐标具有相同的精确坐标。这是为什么?
您使用的语法不正确:将 HAVING
更改为 WHERE
并使用子查询,这样您就可以引用计算的别名而不必重复公式:
select * from (
select *, ( 3959 * acos( cos( radians($locationLatitude) )
* cos( radians( endingLatitude ) )
* cos( radians( endingLongitude ) - radians( $locationLongitude ) )
+ sin( radians( $locationLatitude) )
* sin( radians( endingLatitude ) ) ) ) AS distance
from trips) x
WHERE distance < 10
ORDER BY distance
LIMIT 0, 10
HAVING
用于组的聚合值条件,例如 GROUP BY FOO HAVING COUNT(*) > 3
,但您没有进行任何分组;你需要一个简单的 where 子句。
不幸的是,mysql 具有 "lenient" 分组语法,它允许您的语句在没有语法错误的情况下执行,即使它在逻辑上是不合理的。对其他数据库的相同查询 运行 会导致错误。
使用 haversine,以下查询查找坐标在输入坐标 10 英里半径范围内的所有行。
SELECT *
, ( 3959 * acos( cos( radians($locationLatitude) )
* cos( radians( endingLatitude ) )
* cos( radians( endingLongitude ) - radians( $locationLongitude ) )
+ sin( radians( $locationLatitude) )
* sin( radians( endingLatitude ) ) ) ) AS distance
FROM trips
HAVING distance < 10
ORDER
BY distance
LIMIT 0 , 10;
但是,它不会 return 行与输入的坐标具有相同的精确坐标。这是为什么?
您使用的语法不正确:将 HAVING
更改为 WHERE
并使用子查询,这样您就可以引用计算的别名而不必重复公式:
select * from (
select *, ( 3959 * acos( cos( radians($locationLatitude) )
* cos( radians( endingLatitude ) )
* cos( radians( endingLongitude ) - radians( $locationLongitude ) )
+ sin( radians( $locationLatitude) )
* sin( radians( endingLatitude ) ) ) ) AS distance
from trips) x
WHERE distance < 10
ORDER BY distance
LIMIT 0, 10
HAVING
用于组的聚合值条件,例如 GROUP BY FOO HAVING COUNT(*) > 3
,但您没有进行任何分组;你需要一个简单的 where 子句。
不幸的是,mysql 具有 "lenient" 分组语法,它允许您的语句在没有语法错误的情况下执行,即使它在逻辑上是不合理的。对其他数据库的相同查询 运行 会导致错误。