我想执行 zip-search 的查询。我有一个这样的域模型:
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(query)”方法执行以下查询:
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
但是由于不允许“交叉连接”或“HAVING”,或者“zip_data 未映射”或类似的任何东西,我总是遇到一些错误......
我认为可以执行随机查询并取回查询选择的所有列...是否有默认域模型可以在其中执行此类操作?
谁能帮我如何执行这个查询?
感谢帮助!
格雷茨
五
编辑:我想使用“ 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 未映射。有没有办法像这样映射和使用它?