【发布时间】:2020-02-04 20:31:18
【问题描述】:
我有 2 张桌子。我的一张users 表是:
id name longitude latitutde
----- ----- ----------- -----------
1 Mark -76.316528 40.036027
2 John -95.995102 41.25716
3 Paul -82.337036 29.645095
4 Dave -82.337036 29.645095
5 Chris -76.316528 40.036027
我正在使用 SQL 来检测附近的人:SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-122) ) + sin( radians(37) ) * sin(radians(latitude)) ) ) AS distance FROMusersHAVING distance < 50 ORDER BY distance DESC LIMIT 20
另一个matches是这样的:
id sender receiver status
----- ----- ----------- -----------
其中 sender 是发送邀请的人,receiver 是接收者。
SQL 请求应在users 中搜索附近的人,并在matches 中检查他们的ID。如果 ID 不存在,则作为发送者和接收者返回此人的用户 ID 以建立新连接。
例如,Paul 正在搜索附近的人,而我们从 users 看到的 Dave 就在他附近。所以 Dave ID 应该只返回给 Paul,如果他们的 id 不在 matches table OR Paul == receiver AND status == 0 中。
应该如何编写这个 SQL 查询来返回附近人的 20 个 ID?
【问题讨论】: