ruby-on-rails-Postgres排序问题

我想按对DESC的评分进行排序.它适用于MySQL,但适用于PostgreSQL.我得到不同的结果.

您可以在这里看到问题:http://www.vinderhimlen.dk/konkurrencer

我的控制器:

  def sort_column
    Konkurrancer.column_names.include?(params[:sort]) ? params[:sort] : "rating"
  end

  def sort_direction
    %w[desc asc].include?(params[:direction]) ? params[:direction] : "desc"
  end
最佳答案
由于您的问题缺乏详细信息,因此不确定您的问题究竟是什么,还是“不起作用”.但是至少有两个因素会影响排序,以至于您在MySQL和PostgreSQL中会得到不同的结果.

第一个是collation.如果您正在使用9.1 Beta,则为In particular.最后,我安装了MySQL(这是前一阵子的,所以他们可能已经修复了此问题),默认情况下将其整理为latin-1 / swedish,而将PostgreSQL整理为utf-8 / english.

另一个为空.如果有内存,MySQL总是将这些放在最后.相比之下,PostgreSQL始终将它们放置在btree索引的末尾,因此在订购asc时将它们放置在最后,在订购desc时将它们放置在第一.您可以通过使用nulls first/nulls last订购来更改此行为.

在您的特定情况下,我的猜测是,您希望按降序对desc空值进行排序,而不是将空值放在第一位的默认行为.

转载注明原文:ruby-on-rails-Postgres排序问题 - 代码日志