gpt4 book ai didi

mysql - 连接两个表子查询

转载 作者:行者123 更新时间:2023-11-29 18:05:43 25 4
gpt4 key购买 nike

我正在尝试从用户位置在给定半径内的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 运行

Here's a screenshot of the table state

所以基本上用户 89、90 和 91 会落在位置半径内,但不会包含在结果中,因为用户 88 已经喜欢了他们。

最佳答案

试试这个...

SELECT users2.*
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
WHERE ( 3959 * acos( cos( radians(28.247800068217) ) * cos( radians( `lat` ) ) * cos( radians( `lon` ) - radians(-80.726205977101) )
+ sin( radians(28.247800068217) ) * sin( radians( `lat` ) ) ) ) < = 5
ORDER BY time_stamp

两个表之间的连接正常。计算列已添加到 select 子句和 where 子句中,因为过滤器需要它。将其放在一个 View 中会更容易,这样如果您需要更改它,可以在一个地方完成。

编辑:从 SELECT 中删除了计算,因为我相信您不需要看到它。只需将其保留在 WHERE 子句中,因为需要对其进行过滤。

关于mysql - 连接两个表子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47874642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com