我得到了这段代码:
$userquery = mysqli_query($con, "SELECT *,
( 3959 * acos( cos( radians('$latme') ) *
cos( radians( latitude ) ) *
cos( radians( longitude ) -
radians('$lonme') ) +
sin( radians('$latme') ) *
sin( radians( latitude ) ) ) )
AS distance
FROM `eintrag`
ORDER BY distance ASC");
并获得距离从 0.1 到 999 的结果。
现在,当我尝试仅获得距离低于 20 的结果时:
FROM `eintrag`
WHERE distance < 20
ORDER BY distance ASC");
然后它不起作用,我没有得到任何结果。
如何做对?
提前致谢
最佳答案
您不能在同一级别的 where 子句中重复在 select 中定义的别名。但是,MySQL 有一个重载的 HAVING
运算符,您可以使用它:
FROM `eintrag`
HAVING distance < 20
ORDER BY distance
此处仅有的其他两个选项是在 WHERE
子句中重复整个 Haversine 公式(丑陋),或者包装当前查询然后使用子查询(性能较差)。
关于PHP MySQLi - WHERE "calculated value is smaller than"不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55547356/