0

次の AR クエリを使用してメッセージを会話として取得する (sender_id でグループ化する) 場合、最近のメッセージを最初に表示するにはどうすればよいですか? このクエリは、送信された最初のメッセージを表示していますが、最新のメッセージは表示していません。

User.find(1).messages.select("DISTINCT ON (messages.sender_id(created_at)) * ")
  .where("messages.sender_id = (?)",friend.id)
  .group("messages.sender_id, messages.updated_at, messages.id, messages.user_id, messages.sent, messages.read")

ここで注文句をどこにどのように追加するか、少し迷っています。

4

1 に答える 1

0

ORDER BY一緒に仕事をDISTINCTしないでください。

これを行う適切な方法は、代わりにgroup byandを実行することです。order by

大きな問題は、それSELECT *が機能しないGROUP BYため、次のいずれかをあきらめる必要があることです。

  • GROUP BY
  • DISTINCT
  • ORDER BY

1つのオプションは、SELECT *すべての列を手動でリストするように変更でき、グループ化されると予想されない列は次のように集計に入れることができますmin()(これは私のSQLクエリで行っていることです.

私は ORM を使用しませんが、うまくいけば、特に何をすべきかのアイデアが得られることを願っています。とにかく、あなたはすでにSQLにかなり近づいているからです。

于 2013-04-24T05:56:11.610 に答える