2013-02-23 167 views
0

首先 - 我讀了大約7頁類似主題的帖子,但無法找到我的挑戰權的洞察力SQL與多個where子句

我的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我只是讓它位置='2'那麼它工作正常[它發現列](但我需要的距離選擇)。

任何有關如何擊倒的建議?

+0

您是否也應該選擇列位置 – AgnosticDev 2013-02-23 02:11:57

+0

您有沒有'GROUP BY'的'HAVING'? – 2013-02-23 02:14:11

+0

@ExplosionPills在你有計算列的時候,這在mysql中沒問題。在SQL Server中(也許別人?)這是一個不行。所以這就是爲什麼'HAVING'在'距離'這個欄上沒問題。 – 2013-02-23 02:15:19

回答

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

+0

搖擺 - 我試過HAVING和沒有愛的地方,但是把它們翻過來和SUCESS。謝謝你仁慈的人。 – 2013-02-23 02:18:02

+0

是的,順序很重要:)祝你好運 – 2013-02-23 02:19:28

0

不要不GROUP BY使用HAVING。你可以試試這個,而不是

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 

這不是很漂亮,但它應該工作。