gpt4 book ai didi

mysql - 为什么我的 MySQL 查询的 where 子句中的列距离未知?

转载 作者:行者123 更新时间:2023-11-28 23:37:53 24 4
gpt4 key购买 nike

我目前正在尝试使用 Haversine 公式为我的企业目录网站制作定位器。我的查询当前在 where 子句中返回错误 Unknown column distance。我不知道为什么。这应该有效,因为我已经在 Haversine 公式之后直接定义了距离别名。有什么想法吗?

SELECT 
l.listing_id AS id, l.category_id, l.title AS listing_title, l.description, l.address, l.city, l.zip, UNIX_TIMESTAMP(l.date_submitted) AS date_submitted, l.latitude, l.longitude,
( 6371 * acos( cos( radians(40.293861) ) * cos( radians( l.latitude ) ) * cos( radians( l.longitude ) - radians(-76.600252) ) + sin( radians(40.293861) ) * sin( radians( l.longitude ) ) ) ) AS distance,
c.category_id AS cat_id, c.title AS cat_title, c.slug AS cat_slug,
r.region_id AS region_id, r.title AS region_title, r.slug AS region_slug
FROM listings AS l
LEFT JOIN categories AS c ON l.category_id = c.category_id
LEFT JOIN regions AS r ON l.region_id = r.region_id
WHERE distance < 10
ORDER BY l.date_submitted DESC

最佳答案

如上所述,您不能在 WHERE 子句中使用别名,因为该值仍然未知。

我想指出的是,您显示的这个查询不会随着行数的增加而扩大,因为 MySQL 无法缩小可能匹配项的数量。

一个好的方法是添加一个 WHERE 条件,您将使用它来定义一个内部有圆形区域的方形区域。这样你的SQL就不会扫描整个世界,而是会过滤那些区域“足够接近”圆形区域的行;然后计算小于10的距离。

例如,如果您要查找点 X,Y 的距离 10;你可以说

WHERE
latitude < (X+5) AND latitude > (X-5) AND longitude < (Y+5) AND longitude > (Y-5)

这意味着您将忽略一组行,然后对一部分行进行昂贵的计算;这比对整个数据集进行昂贵的计算要快得多。

我希望这能帮助您获得更快、更具扩展性的应用程序。

关于mysql - 为什么我的 MySQL 查询的 where 子句中的列距离未知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35237331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com