【发布时间】:2017-09-08 17:20:08
【问题描述】:
我正在尝试进行查询以获取给定坐标的最近(按公里 -> 半径)用户。 一切正常,但是因为我要保存最后 10 个位置,所以我想在单个查询中获取每个用户的最后一个位置。
SELECT `id`, `user_id`, (6371 * acos( cos( radians(42.698201) ) * cos( radians(map_lat) ) *
cos( radians(map_lon) - radians(23.318825)) + sin(radians(42.698201)) *
sin(radians(map_lat)) )) as distance, `map_lat`, `map_lon`, `date_added`
FROM (`map_locations`)
WHERE `user_id` != '3'
HAVING `distance` < 1000
ORDER BY `date_added` desc
这会正确返回所需距离的每一行。
现在我想GROUP BYuser_id,例如,如果有 2 个唯一用户 -> 获取他们最后的位置,由 date_added 排序
我想要的结果示例:
[0] => stdClass Object
(
[id] => 22
[user_id] => 1
[distance] => 1.4498781932309621
[map_lat] => 42.7028
[map_lon] => 23.3022
[date_added] => 2017-09-07 14:45:21
)
[1] => stdClass Object
(
[id] => 21
[user_id] => 2
[distance] => 912.4120338405637
[map_lat] => 43.4124
[map_lon] => 12.1231
[date_added] => 2017-09-07 14:24:59
)
不幸的是,当我添加 Group By 语句时,我得到了 0 个结果,因为正在为每个用户获取第一个结果(订购肯定不起作用)。
我的研究是,如果Group By 与date_added 的分组结果一起正常工作,那么在它之后会正常工作
换句话说:如果每个用户的最后位置与距离标准匹配,则想要获取所有唯一用户及其最后位置。
【问题讨论】:
-
Group by可以工作,但我认为由于时间戳而无法工作。他们改变的秒数并不一致。您是否尝试在不带时间戳的情况下对它们进行分组。