首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails4中基于关联点的排序

rails4中基于关联点的排序
EN

Stack Overflow用户
提问于 2016-08-17 05:01:06
回答 1查看 42关注 0票数 2

Post模型

代码语言:javascript
复制
has_many :votes

投票模型

代码语言:javascript
复制
belongs-to :post

我需要从posts表中获取所有的帖子并显示出来。但是条目应该在ASC/DESC(params:order)的投票中进行排序。如果所有帖子都有投票表条目,那么下面的代码就可以很好地工作了。

我有一个问题如下:

代码语言:javascript
复制
@posts = Post.joins('LEFT OUTER JOIN votes ON votes.post_id = posts.id').select('posts.*, SUM(votes.point) AS total_point').group('posts.id').order("total_point #{params[:order]}")

但是,如果任何帖子都没有选票表条目,那么未投票的帖子就会使列表排序出现错误。如果某些帖子没有投票,如果排序顺序是ASC,则需要首先在列表中显示未投票的帖子,如果排序顺序是DESC,则需要在列表中最后显示未投票的帖子。请帮帮忙。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 08:31:53

因为并不是所有的帖子都有投票权,那么在“加入”之后,一些记录将具有votes.point值作为NULLNULL是应该单独处理的特定值,可能会导致降序问题,因为它们在PostgreSql中按默认升序排序。为了对NULL投票记录进行适当排序,我建议将NULL值强制为0。

代码语言:javascript
复制
SUM(COALESCE(votes.point, 0))

在此之后,所有没有选票的帖子的total_point值都将等于0,这是一个可以按需要排序的规则数字。

或者,PostgreSql有额外的语法来指定如何使用ORDER BY子句对NULL值进行排序。https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-ORDERBY示例:

代码语言:javascript
复制
ORDER BY somevalue DESC NULLS LAST
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38988438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档