gpt4 book ai didi

MySql 检索所有用户的最后已知位置列表

转载 作者:行者123 更新时间:2023-11-29 06:25:08 26 4
gpt4 key购买 nike

所以在我的数据库中,我会在每个用户登录时跟踪他们最后已知的 GPS 纬度和经度,这样我以后就可以使用这些数据来联系那些在特定 GPS 位置的特定半径范围内拥有最后已知位置的用户.为此,我首先需要获取数据库中所有用户的最后已知位置列表。

这是我的观点的查询:

SELECT u.email, l.latitude, l.longitude
from user u
left join locationhistory l
on u.userid = l.userId
WHERE (u.userId, l.userId) =
(Select userId, MAX(l.locationDate)
FROM locationHistory
GROUP BY userId)
group by email

我收到的错误是: #1242 - 子查询返回超过 1 行

显然...我想要一个完整的列表,为什么这行不通?我觉得我错过了一些非常基本的东西,但我显然只是失去了动力。

谢谢!

最佳答案

当 where 子句需要一个值时,子查询确实返回多个值。一种解决方案是更改查询以改为使用联接。

SELECT u.email, l.latitude, l.longitude
FROM user u
JOIN locationhistory l ON u.userid = l.userId
JOIN (
SELECT userId, MAX(locationDate) max_locationdate
FROM locationHistory
GROUP BY userId
) x ON u.userId = x.userid AND l.locationdate = x.max_locationdate

编辑:我想我犯了一个错误,不小心过滤掉了没有位置的用户...如果您希望所有用户出现,即使他们在 locationhistory 表中没有任何记录,那么您想要的查询是最可能是这样的:

SELECT u.email, l2.latitude, l2.longitude
FROM user u
LEFT JOIN (
SELECT l1.* FROM locationhistory l1
JOIN (
SELECT userId, MAX(locationDate) max_locationdate
FROM locationHistory
GROUP BY userId
) x ON l1.locationdate = x.max_locationdate AND l1.userId = x.userid
) l2 ON u.userid = l2.userId

关于MySql 检索所有用户的最后已知位置列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507240/

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