Post模型
has_many :votes投票模型
belongs-to :post我需要从posts表中获取所有的帖子并显示出来。但是条目应该在ASC/DESC(params:order)的投票中进行排序。如果所有帖子都有投票表条目,那么下面的代码就可以很好地工作了。
我有一个问题如下:
@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,则需要在列表中最后显示未投票的帖子。请帮帮忙。
谢谢
发布于 2016-08-17 08:31:53
因为并不是所有的帖子都有投票权,那么在“加入”之后,一些记录将具有votes.point值作为NULL。NULL是应该单独处理的特定值,可能会导致降序问题,因为它们在PostgreSql中按默认升序排序。为了对NULL投票记录进行适当排序,我建议将NULL值强制为0。
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示例:
ORDER BY somevalue DESC NULLS LASThttps://stackoverflow.com/questions/38988438
复制相似问题