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中获得不同的结果。

第一个是整理 。 特别是如果你正在玩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来进行order by rating desc nulls last ,而不是首先放置空值的默认行为。