首页 > 解决方案 > PHP MySQLi - WHERE“计算值小于”不起作用

问题描述

我得到了这个代码:

$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");

然后它不起作用,我没有得到任何结果。

怎么做才对?

提前致谢

标签: phpmysqlsqlmysqli

解决方案


您不能在同一级别的 where 子句中重复 select 中定义的别名。但是,MySQL 有一个重载的HAVING运算符,您可以使用它:

FROM `eintrag` 
HAVING distance < 20
ORDER BY distance

这里唯一的其他两个选项将在WHERE子句中重复整个 Haversine 公式(丑陋),或者包装当前查询然后使用子查询(性能较差)。


推荐阅读