【发布时间】:2014-12-20 21:18:50
【问题描述】:
我正在尝试显示与用户数据相关的广告。
在这里,数据是纬度和经度。
ADS 表格:要显示的广告,包含广告名称、广告文字、纬度和经度
有用户数据的表:TABLE1: 用户id + 经纬度,TABLE2: 用户id + 经纬度 >,TABLE3: 用户id + 经纬度,TABLE4: 用户id + 经纬度
目的是展示广告,当广告的经纬度与10km范围内4个表格中一条或多条行的经纬度匹配,并限制3个结果.
将一个广告与 10 公里范围内的一张桌子关联时有效,但与更多表格关联时无效。
- 我不喜欢OUTER JOINS -
我的查询看起来像这样,我很确定我错了......
SELECT ADS.name, ADS.text,
( 6371 * acos( cos( radians(TABLE1.latitude) )
* cos( radians( ADS.latitude ) )
* cos( radians( ADS.longitude )
- radians(TABLE1.longitude) )
+ sin( radians(TABLE1.latitude) )
* sin( radians( ADS.latitude ) ) ) )
AS check1,
( 6371 * acos( cos( radians(TABLE2.latitude) )
* cos( radians( ADS.latitude ) )
* cos( radians( ADS.longitude )
- radians(TABLE2.longitude) )
+ sin( radians(TABLE2.latitude) )
* sin( radians( ADS.latitude ) ) ) )
AS check2,
( 6371 * acos( cos( radians(TABLE3.latitude) )
* cos( radians( ADS.latitude ) )
* cos( radians( ADS.longitude )
- radians(TABLE3.longitude) )
+ sin( radians(TABLE3.latitude) )
* sin( radians( ADS.latitude ) ) ) )
AS check3,
( 6371 * acos( cos( radians(TABLE4.latitude) )
* cos( radians( ADS.latitude ) )
* cos( radians( ADS.longitude )
- radians(TABLE4.longitude) )
+ sin( radians(TABLE4.latitude) )
* sin( radians( ADS.latitude ) ) ) )
AS check4
FROM ADS
RIGHT OUTER JOIN TABLE1
ON TABLE1.user = ?
RIGHT OUTER JOIN TABLE2
ON TABLE2.user = ?
RIGHT OUTER JOIN TABLE3
ON TABLE3.user = ?
RIGHT OUTER JOIN TABLE4
ON TABLE4.user = ?
HAVING check1 < 10 OR check2 < 10 OR check3 < 10 OR check4 < 10
LIMIT 0,3
【问题讨论】:
标签: mysql