Я хочу выполнить запрос для zip-поиска. У меня есть такая доменная модель:
class Zip_data {
int zc_loc_id
String zc_zip
String zc_location_name
double zc_lat
double zc_lon
static constraints = {
zc_loc_id()
zc_zip()
zc_location_name()
zc_lat()
zc_lon()
}
}
И теперь я пытаюсь выполнить следующий запрос через метод «Zip_data.executeQuery (запрос)»:
SELECT
dest.zc_zip,
dest.zc_location_name,
ACOS(
SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
+ COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
* COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
) * 6380 AS distance
FROM zip_data dest
CROSS JOIN zip_data src
WHERE src.zc_zip = 20537
AND dest.zc_loc_id <> src.zc_loc_id
HAVING distance < 10
ORDER BY distance
Но все время я получаю некоторые ошибки из-за того, что «CROSS JOIN» или «HAVING» не разрешены, или «zip_data не сопоставлен» или что-то в этом роде...
Я думал, что можно выполнить случайный запрос и вернуть все столбцы выбора запроса ... Есть ли модель домена по умолчанию, где я могу делать такие вещи?
Кто-нибудь может помочь мне выполнить этот запрос?
Спасибо за помощь!
Гретц
V
Изменить: я хочу использовать данные "http://opengeodb.org/wiki/OpenGeoDB. Разве нельзя выполнить случайный запрос к базе данных для объекта по умолчанию или любого другого объекта и получить массив хэшей? Или можно создать дополнительный выбор, чтобы дважды сопоставить одну и ту же таблицу? Я попытался создать этот запрос более простым способом:
SELECT
dest.zc_zip,
dest.zc_location_name,
(Select (ACOS(
SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
+ COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
* COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
) * 6380) FROM zip_data as src where src.zc_loc_id<>dest.zc_loc_id and src.zc_loc_id = 20537)
AS distance
FROM zip_data dest
Я знаю, что это не тот же SQL, но я также получаю сообщение об ошибке: zip_data не сопоставлен. Есть ли способ отобразить его и использовать так?