SQLite到Postgres(Heroku)GROUP BY
以下SQLite代码组按conversation_id分组:
@messages=Message.where("messages.sender_id = (?) OR messages.recipient_id = (?)" , current_user.id, current_user.id).group("messages.conversation_id")
在转移到Heroku时,Postgres无法识别此代码。 查看日志,我被告知要将所有Message列添加到GROUP BY – 让我使用这个function代码:
@messages=Message.where("messages.sender_id = (?) OR messages.recipient_id = (?)" , current_user.id, current_user.id).group("messages.conversation_id , messages.updated_at, messages.id, messages.sender_id , messages.recipient_id, messages.sender_deleted , messages.recipient_deleted, messages.body, messages.read_at , messages.ancestry, messages.ancestry_depth, messages.created_at")
只有此代码才能正确地按conversation_id分组。 它只输出符合WHERE条件的所有消息。 有任何想法吗?
我使用DISTINCT ON
来获得function性解决方案:
@messages = Message.select("DISTINCT ON (messages.conversation_id) * ") .where("messages.sender_id = (?) OR messages.recipient_id = (?)", current_user.id, current_user.id) .group("messages.conversation_id, messages.updated_at, messages.id, messages.sender_id, messages.recipient_id, messages.sender_deleted, messages.recipient_deleted, messages.body, messages.read_at, messages.ancestry, messages.ancestry_depth, messages.created_at")
但是,这在SQLite中不起作用。 下载Postgres并直接使用它,而不是在开发中使用SQLite代码和生产中的Postgres代码(Heroku)。
PostgreSQL要求您对所有非聚合属性进行分组。 分组有点说你想要分组属性的独特组合,所以询问所有信息是没有意义的。 我不知道RoR,但你必须单独询问conversation_id
(如果需要,可能会提供汇总信息)。 但是既然你要求在消息表上提供所有信息,我想你可能真的想通过会话ID来订购?
- 当我将我的应用程序推送到Heroku时,为什么我收到错误500“我们很抱歉,但出了点问题”?
- 获取错误:在部署/迁移到Heroku时更新rubygems
- GET请求(无JSON)无法使用Rails 4.1上的Devise 3.2.4validationCSRF令牌的真实性
- Rails&Heroku:我们很抱歉,但出了点问题
- 如何合并两个具有Heroku上相同模式的数据库?
- 为Clojure应用程序启动工头的问题
- 在Heroku中将UTF-8设置为默认字符串编码
- 推送到Heroku时:应用程序中发生错误,无法提供您的页面。 请稍后重试
- 随机慢速Rack :: MethodOverride#调用Heroku上的rails应用程序