0

我有用户名称,位置,created_at 作为表中的重要字段。我想为每个用户检索最新位置,即,我想要这样的东西:

username    location       created_at
abc         New York       2012-08-18 16:18:57
xyz         Mexico city    2012-08-18 16:18:57
abc         Atlanta        2012-08-11 16:18:57

唯一的输入是用户标识的 UId(1,2) 数组。请帮助我完成此操作。我只想知道如何使用活动记录查询接口编写查询。

4

3 回答 3

2

通常,这应该是解决此类问题的标准方法:

SELECT l1.user, l1.location
FROM locations l1
LEFT JOIN locations l2 ON l1.user = l2.user AND l2.created_at > l1.created_at
WHERE l2.id IS NULL

这个想法是将表与自身连接起来,并找到那些没有相同user更大 created_at行的行。

当然,你(user, created_at)的桌子上应该有索引。

现在您应该看到它在 AR 界面中是如何表示的。

于 2012-09-11T09:16:28.690 回答
0

什么时候

u_id 

是用户 ID 的数组,那么

u_id.map{|i| User.find(i).location}

应该是用户位置的数组。

于 2012-09-11T07:32:08.070 回答
0

您可以使用

User.where(:uid => [1,2,3]).maximum('location')

这将创建类似的东西

SELECT MAX(`users`.`location`) AS max_id FROM `users` WHERE `users`.`id` IN (1, 2,3)
于 2012-09-11T07:43:17.577 回答