【发布时间】:2017-12-18 18:48:57
【问题描述】:
我正在尝试从users2 表中获取*,其中用户的位置在给定半径内。
位置查询在user_location2 表上运行良好。
SELECT uid, ( 3959 * acos( cos( radians(28.247800068217) ) * cos( radians( `lat` ) ) * cos( radians( `lon` ) - radians(-80.726205977101) )
+ sin( radians(28.247800068217) ) * sin( radians( `lat` ) ) ) )
AS distance FROM user_location2
HAVING distance <= 25 ORDER BY time_stamp
内部连接在没有位置子查询的情况下也能正常工作
SELECT *
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
我只是无法将两者结合起来。这是我当前的查询,它只是返回所有行,所以我显然做错了什么。
SELECT *
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
WHERE EXISTS (SELECT NULL, ( 3959 * acos( cos( radians(26.247800068217) ) * cos( radians( `lat` ) ) * cos( radians( `lon` ) - radians(-89.726205977101) ) + sin( radians(26.247800068217) ) * sin( radians( `lat` ) ) ) )
AS distance FROM user_location2
HAVING distance <= 5 ORDER BY time_stamp)
包括编辑
我希望添加第三个表 (user_like) 以消除许多不应该包含在结果中的可能行。
假设脚本正在为 user_id = 88 运行
所以基本上用户 89、90 和 91 会在位置半径范围内,但不会包含在结果中,因为用户 88 已经喜欢他们。
【问题讨论】: