Проблема сортировки Postgres - PullRequest
1 голос
/ 01 июня 2011

Я хочу отсортировать по рейтингу 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 Ответ

5 голосов
/ 01 июня 2011

Не уверен, в чем конкретно заключается ваша проблема или как она "не работает" из-за отсутствия подробностей в вашем вопросе. Но как минимум два фактора могут повлиять на сортировку таким образом, что вы получите разные результаты в MySQL и PostgreSQL.

Первое - сопоставление . В частности , если вы играете с бета-версией 9.1. В прошлый раз я установил MySQL (который был некоторое время назад, поэтому они могли это исправить с тех пор), он по умолчанию сравнивал латиницу-1 / шведский, против utf-8 / english для PostgreSQL.

Другой является нулем. MySQL всегда размещает эти последние, если память не изменяет. В отличие от этого, PostgreSQL последовательно размещает их в конце индексов btree и, таким образом, ставит их последними при упорядочении asc и первыми при упорядочении desc. Вы можете изменить это поведение, упорядочив, используя null first / nulls last .

В вашем конкретном случае, я предполагаю, что вы хотите order by rating desc nulls last, в отличие от поведения по умолчанию, которое ставит нулевые значения в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...