我想通过评级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
答案 0 :(得分:5)
由于您的问题中缺少详细信息,因此不确定您的问题究竟是什么或者“无效”。但至少有两个因素会影响排序,以至于你在MySQL和PostgreSQL中会得到不同的结果。
第一个是collation。 In 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
,而不是首先放置空值的默认行为。