Postgres(Heroku)中的ORDER BY问题

时间:2011-06-04 17:04:24

标签: sql ruby-on-rails ruby-on-rails-3 postgresql heroku

以下代码适用于Postgres(Heroku):

 @messages = Message.select("DISTINCT
 ON (messages.conversation_id)
 *").where("messages.sender_id = (?) OR messages.recipient_id = (?)",
 current_user.id, current_user.id)

但是,在尝试通过附加.order("messages.read_at DESC")来排序结果时,我收到以下错误:

ActionView::Template::Error (PGError: ERROR: column id_list.alias_0 does not exist)

在查看生成的SQL时,我看到在没有要求的情况下围绕ORDER BY语句创建了一个别名:

messages.recipient_id = (32))) AS id_list ORDER BY id_list.alias_0 DESC)

我无法找到一个解决方法,而不是在整个语句中使用“find_by_sql” - 这会对应用程序造成严重影响。

1 个答案:

答案 0 :(得分:1)

不要投票,我只发帖,因为在评论中张贴了很多行并没有表现得很好。

我会编写一个“查询,返回按其conversation_id分组的邮件,以便显示每个会话中的最后一条消息”,如下所示:

SELECT m.*
FROM messages m
  JOIN 
    ( SELECT conversation_id
           , MAX(created_date) AS maxdate
      FROM messages
      WHERE ...
      GROUP BY conversation_id
    ) AS grp
    ON  grp.conversation_id = m.conversation_id
    AND grp.maxdate = m.created_date
ORDER BY m.read_at DESC

不知道如何在Heroku中完成此操作,或者甚至可能,但它避免了DISTINCT ON。如果这导致了错误,那可能会有所帮助。

相关问题