为什么此查询 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" 分组语法,它允许您的语句在没有语法错误的情况下执行,即使它在逻辑上是不合理的。对其他数据库的相同查询 运行 会导致错误。