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 byandorder by代替。

最大的问题是它SELECT *不起作用GROUP BY,因此您必须放弃以下之一:

  • GROUP BY
  • DISTINCT
  • ORDER BY

一种选择是您可以更改SELECT *以手动列出所有列,并且可以将那些不希望分组的列放入聚合中,例如min()(这是我在 SQL 查询中所做的。

我不使用 ORM,但希望这能让你知道该怎么做,尤其是。因为无论如何你已经非常接近SQL了。

于 2013-04-24T05:56:11.610 回答