[英]ORDER BY issue in Postgres (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”之外,我還沒有找到一種解決方法——這對應用程序造成了沉重的負擔。
不要投這個,我只發帖是因為在評論中發布很多行並不能很好地顯示出來。
我會編寫一個“返回按其會話 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
。 如果這是導致錯誤的原因,它可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.