下面的代碼工作Postgres的(Heroku的):ORDER BY 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'。 – 2011-06-04 17:30:56
你是對的,GROUP BY代碼是不必要的。更新了問題和錯誤消息以反映這一點。此查詢返回按其會話標識分組的消息,以便顯示每個對話中的最後一條消息。 – neon 2011-06-04 17:41:10