Postgres排序问题

时间:2011-06-01 10:27:04

标签: ruby-on-rails postgresql sorting

我想通过评级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

1 个答案:

答案 0 :(得分:5)

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

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

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

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