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

入力のみがユーザー ID の 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 に答える