получить все маркеры в пределах заданного радиуса в sql - PullRequest
1 голос
/ 05 августа 2010

Я пытаюсь получить все местоположения, хранящиеся в базе данных, с помощью оператора 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 ]

2 голосов
/ 05 августа 2010

Что вы сделали не так.Вот решение:

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 голосов
/ 08 сентября 2010

Вы можете решить эту проблему с помощью создания хранимой процедуры или представления на сервере SQL или сервере MySQL.

...