0

だから私は列を持つプライベートメッセージモデルを持っています: sender_idrecipient_idcontent、およびcreated_at.

メッセージを送信した最後の 5 人の受信者を選択したいと考えています。ただし、列を絞り込む方法がわかりません。

私の現在のクエリはこれです:

SELECT DISTINCT recipient_id, created_at FROM private_messages WHERE sender_id = :user_id ORDER BY created_at DESC LIMIT 5

に必要なので、created_at 列を取り除くことはできませんORDER BY。何かが欠けているに違いありませんが、それが何であるかは完全にはわかりません。

4

6 に答える 6

0

試してみてください: SELECT recipient_id FROM(SELECT recipient_id,MAX(created_at) as created_at FROM private_messages WHERE sender_id = :user_id GROUP BY recipient_id)a ORDER BY created_at DESC LIMIT 5;

于 2013-06-24T07:29:56.947 に答える
0

これを試して

 WITH t AS ( SELECT max(created_at) AS created_at, recipient_id  FROM messages 
 GROUP BY recipient_id  )

 SELECT created_at, recipient_id   FROM t ORDER BY created_at DESC LIMIT 5  
于 2013-06-24T08:27:44.160 に答える
0

以下のようなことを試しましたか:

SELECT TOP 5  recipient_id
FROM private_messages 
WHERE sender_id = :user_id 
GROUP BY recipient_id
ORDER BY created_at DESC

order by 句で使用するために select で created_at を使用する必要はないと思います。これは、使用しているデータベース システムによって異なりますが、SQL サーバーではこれが許可されます。

于 2013-06-24T03:46:49.233 に答える
0

これを試してください: SELECT DISTINCT recipient_id, created_at FROM private_messages WHERE sender_id = :user_id GROUP BY recipient_id ORDER BY created_at DESC LIMIT 5

于 2013-06-24T03:51:45.320 に答える