【发布时间】:2011-06-04 17:04:23
【问题描述】:
以下代码适用于 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”之外,我还没有找到解决方法——这对应用程序造成了沉重的负担。
【问题讨论】:
-
也许
DISTINCT ON有这个副作用。我不明白这个查询应该显示什么。也不是为什么你同时拥有DISTINCT ON和GROUP BY。 -
你是对的,GROUP BY 代码是不必要的。更新了问题和错误消息以反映这一点。此查询返回按其会话 ID 分组的消息,以便显示每个会话中的最后一条消息。
标签: sql ruby-on-rails ruby-on-rails-3 postgresql heroku