gpt4 book ai didi

grails - 使用Acos/having/cross-join加入grails executeQuery

转载 作者:行者123 更新时间:2023-12-02 15:31:35 25 4
gpt4 key购买 nike

我想对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(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

但是一直以来我都因为“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未映射。有没有办法像这样映射和使用它?

最佳答案

好的,现在我找到了解决方案。我不知道为什么,但是由于连接,它似乎不可能在一个sql中...我不确定查询中是否还有另一个错误(也许是表名或其他任何情况),但是我得到两个请求:
首先,我获得源zip的数据(我想开始进行半径搜索的位置)

def sourcePlz = Zip_data.findByZc_zip('20537')

之后,我可以搜索半径为10公里的示例:
def query = """FROM Zip_data as dest WHERE dest.zc_lat IS NOT NULL AND dest.zc_lon IS
NOT NULL
AND 6371.0*ACOS(
COS(RADIANS(dest.zc_lat))*COS(RADIANS(:qlat))*COS(RADIANS(dest.zc_lon)-RADIANS(:qlon))
+ SIN(RADIANS(dest.zc_lat))*SIN(RADIANS(:qlat)) ) < :qradius
"""
plz_objs = Zip_data.executeQuery(query, [qlat:sourcePlz.zc_lat, qlon:sourcePlz.zc_lon, qradius:umkreis.toDouble()])

这就是全部:)我得到了10公里半径内的sourceZip的所有压缩文件。
希望对所有尝试过的人有所帮助。

格蕾兹

V

关于grails - 使用Acos/having/cross-join加入grails executeQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com