Использование логического выражения в порядке по предложению
У меня есть пункт заказа, который выглядит так:
( user_id <> ? ), rating DESC, title
Где ? заменяется идентификатором текущего пользователя.
В postgresql это дает мне порядок, который я ищу, то есть по текущему пользователю, затем наивысший рейтинг, затем заголовок (в алфавитном порядке).
Однако в MySQL я получаю неясный порядок, в котором текущий пользователь не является ни первым, ни последним, а также не по рейтингу или титулу.
Является ли мой единственный вариант для совместимости между базами данных - заменить это быстрое и грязное логическое выражение оператором CASE WHEN .. THEN .. ELSE .. END?
Изменить: спасибо всем за помощь, как правильно указали Хаос и Чад Берч, проблема заключается в другом месте (в частности, я использую результаты вышеуказанного запроса в качестве входных данных в следующий, а затем удивляюсь, что порядок первого утерян;)
Ответов (3)3
MySQL не имеет реального понятия логических значений, а просто сопоставляет TRUE
и FALSE
с числовыми значениями, 1
и 0
соответственно.
В этом случае user_id <> ?
вернет 0 для большинства строк в вашей таблице и 1 для остальных строк. Порядок сортировки по умолчанию является ASC
, то есть , по всей вероятности , строки , которые вы хотите находятся в нижней части результирующего набора ( 0/FALSE
прийти до 1/TRUE
того ). Попробуйте изменить свой запрос, чтобы учесть это.
( user_id <> ? ) DESC, rating DESC, title
Если предположить, что это действительно проблема, совместимость между базами данных может быть легко достигнута.
IF(user = ?, 0, 1), rating DESC, title