0

首先——我已经阅读了大约 7 页标题相似的帖子,但找不到适合我挑战的正确见解

我的 SQL:

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
HAVING distance < '50'  and location = '2'  
ORDER BY distance LIMIT 0 , 10

我收到错误消息:无效查询:“有子句”中的未知列“位置”

如果不是 HAVING 我只是让它 WHERE location = '2' 那么它工作正常[它找到列](但我需要距离选择器)。

关于如何将其击倒的任何建议?

4

2 回答 2

2

同时使用 WHERE 和 HAVING。 HAVING用于聚合和计算列。在WHERE普通的旧柱子上。

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
WHERE location = '2' 
HAVING distance < '50'  
ORDER BY distance LIMIT 0 , 10

在这里找到更多解释WHERE vs HAVING

于 2013-02-23T02:13:31.957 回答
0

不要使用HAVING没有GROUP BY。你可以试试这个

SELECT name, address, lat, lng, city, state, phone, zip, info, ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
  FROM myhealthfinder_map 
 WHERE location = '2' AND
( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) < 50
 ORDER BY distance LIMIT 0 , 10

它不漂亮,但它应该工作。

于 2013-02-23T02:20:37.473 回答