Postgres排序问题

Jon*_*Jon 1 sorting postgresql ruby-on-rails

我想通过评级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
Run Code Online (Sandbox Code Playgroud)

Den*_*rdy 5

由于您的问题中缺少详细信息,因此不确定您的问题究竟是什么或者"无效".但至少有两个因素会影响排序,以至于你在MySQL和PostgreSQL中会得到不同的结果.

首先是整理.特别是如果你正在玩9.1 beta.最后我安装了MySQL(这是前一段时间,所以他们可能已经解决了这个问题),默认情况下整理为latin-1/swedish,而postgreSQL则为utf-8/english.

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

在您的特定情况下,我的猜测是您想要的order by rating desc nulls last,而不是首先放置空值的默认行为.