获取sql中给定半径内的所有标记

获取sql中给定半径内的所有标记,sql,coldfusion,google-maps-api-3,distance,Sql,Coldfusion,Google Maps Api 3,Distance,我试图用下面描述的sql语句获取数据库中存储的所有位置 我的sql语句是: SELECT TOP(10) *, ( 6371 * acos( cos( radians(<cfqueryparam cfsqltype="CF_SQL_Nu

我试图用下面描述的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;
选择顶部(10)
*,
(
6371 *
acos(
因为(
弧度()
) *
因为(
弧度(卡斯特拉)
) *
因为(
弧度(长)-
弧度()
) +
罪(
弧度()
) *
罪(
弧度(卡斯特拉)
)
)
)作为距离
来自客户
距离小于25的
按距离排序;
问题是我遇到了一个错误,无法找出原因。。。 错误:
列名“distance”无效。

在这一行:
radians()
(第二次出现)


为什么会出现此错误?如何修复它?

您做错了什么。以下是解决方案:

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;
选择距离
(选择顶部(10)
*,
(
6371 *
acos(
因为(
弧度()
) *
因为(
弧度(卡斯特拉)
) *
因为(
弧度(长)-

弧度(您可以通过在sql server或mysql server中创建存储过程或视图来解决此问题。

这会产生另一个错误:“newTable.distance”列在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。抱歉。需要将GROUP BY子句放在HAVING和ORDER BY之间。您应该编辑您的答案以包含正确的代码,然后。