2010-08-05 48 views
1

我試圖獲取存儲在數據庫與SQL語句的所有位置描述here得到給定半徑內的所有標記在SQL

我的SQL語句是:

SELECT TOP(10) 
       *, 
       (
        6371 * 
        acos(
         cos(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         cos(
          radians(custLat) 
         ) * 
         cos(
          radians(custLong) - 
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.longtitude#">) 
         ) + 
         sin(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         sin(
          radians(custLat) 
         ) 
        ) 
       ) AS distance 
       FROM customers 
       HAVING distance < 25 
       ORDER BY distance; 

問題是我得到的一個錯誤,想不通爲什麼... 錯誤:Invalid column name 'distance'.

在這條線:radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">)(第二次出現)

爲什麼我得到這個錯誤,我該如何解決?

回答

2

你做錯了什麼。這裏是解決方案:

SELECT distance FROM 

(SELECT TOP(10) 

       *, 
       (
        6371 * 
        acos(
         cos(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         cos(
          radians(custLat) 
         ) * 
         cos(
          radians(custLong) - 
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric value="#FORM.longtitude#">) 
         ) + 
         sin(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         sin(
          radians(custLat) 
         ) 
        ) 
       ) AS distance 
       FROM customers 
       ) newTable 
       HAVING distance < 25 
       GROUP BY distance 
       ORDER BY distance; 
+0

這給出了一個不同的錯誤: 列'newTable.distance'在HAVING子句中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – 2010-08-05 09:40:59

+0

對不起。需要在HAVING和ORDER BY之間放置GROUP BY子句。 – ppshein 2010-08-05 09:58:50

+0

然後,您應該真正編輯您的答案以包含正確的代碼。 – 2010-08-05 12:11:33

0

您可以使用在sql server或mysql服務器中創建存儲過程或視圖來解決它。

相關問題