【发布时间】:2018-06-01 08:45:08
【问题描述】:
我有一个 mysql 查询,可以在给定点一定距离内获取用户
SELECT users2.*
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
WHERE ( 3959 * acos( cos( radians(28.547800068217) ) * cos( radians( `lat` ) ) * cos( radians( `lon` ) - radians(-82.726205977101) )
+ sin( radians(28.547800068217) ) * sin( radians( `lat` ) ) ) ) <= 25
AND
ORDER BY time_stamp
我希望添加第三个表 (user_like) 以消除许多不应该包含在结果中的可能行。
假设脚本正在为 user_id = 88 运行
[![这里是表格的状态][1]][1]
我在调用第三个表或完全包含它时遇到问题。
所以基本上用户 89、90 和 91 会在位置半径范围内,但不会包含在结果中,因为用户 88 已经喜欢他们。
类似:
WHERE user_like.uid1 = 88 AND user_like.uid2 != (89,90,91)
编辑:
这是 3 个表结构:
-users2
id int(11)
(其他列已被省略,因为在这种情况下它们不相关选择 *)
-user_location2
uid int(11)
lat double
lon double
time_stamp bigint(20)
-user_like
uid1 int(11)
uid2 int(11)
time_stamp bigint(20)
为了澄清一点,我有一个用户发送了一个请求(比如说用户 88),该请求应该返回距离他们 25 英里内的所有用户(这部分目前有效)。我要添加的是考虑 user_like 表的查询。如果用户 88 已经“喜欢”了另一个用户(uid1、uid2),那么应该从查询结果中删除该用户,因为用户 88 已经看到并喜欢了该用户。
【问题讨论】:
-
我不认为您显示的结果来自您的查询。您的 users2 表中的列是什么? user_like 表的内容是什么?什么定义了一个用户是否和其他用户一样?
-
我上面贴的表是第三张表(user_like)。 users2 表由用户 ID 和基本信息(姓名、年龄、性别)等组成。我想从我们处理的原始查询的结果中消除(对于这种情况)用户 89、90 和 91。
-
查询的图像有多大用处?答案:与数据图像一样有用。
-
好的开始,谢谢。 DDL 和“样本数据”之间存在细微差别。当您调试任何查询时,您会做什么? (查看数据)。