依赖于2个表的java SQL查询?
我有一个包含2个表的数据库:
- 商业李>
- 优惠券
Businesses
中的每一行都有以下字段:
{{
其中location_x
和location_y
是谷歌地图的latitue
和longitue
坐标
在Coupons
表中,每一行都有以下字段:
{{
id
是优惠券id
而business_id
是该优惠券所属business
的id
我的问题:
通过查询Coupons
,我如何从给定坐标获得其所有者业务位置半径小于10km
的所有优惠券
或者换句话说,就是这样的人:
如何获取每个优惠券业务id,然后转到业务表,并检查该业务id位置的半径是否小于给定位置10公里
我认为这与{
我在Java的hibernate框架中工作
请帮帮我,提前谢谢
# 1 楼答案
我不认为单用SQL就可以做到这一点,因为您需要进行一些计算来计算出企业与给定位置之间的距离
可行的方法是查询业务,计算所有偏差,扔掉10公里以上的偏差,然后查询优惠券
如果你只是想得到一个结果与优惠券匹配的企业内部加入将为你工作
# 2 楼答案
你必须用公式计算距离。这里有你的问题的答案:Finding a geography point within a range of another - SQL Server
# 3 楼答案
这可以通过数学来完成
}与{}和{}的{}内
首先,我们知道给定一个
Point P(x, y)
,P
位于{如果它满足方程
(x-a)^2 + (y - b)^2 <= r^2
因此,在你的例子中,中心将是提供的初始坐标
为了获得给定半径范围内企业的所有优惠券,此查询应该做到这一点
在上面的查询中
a is input_y
和b is input_x
和r is the radius = 10
。查询假设地球的半径为6371公里编辑:在与@acfrancis讨论后,我使用更适合于计算球体上点之间距离的公式重写了查询。这对于您的用例应该是可行的(即使地球不是完美的球体)。使用的所有函数都是postgres特有的。详情可参见此处http://en.wikipedia.org/wiki/Great-circle_distance