簡體   English   中英

Postgres (Heroku) 中的 ORDER BY 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM