В настоящее время я делаю очень простой OrderBy в своем заявлении.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
Проблема в том, что записи NULL для 'position' обрабатываются как 0. Поэтому все записи с позицией как NULL появляются раньше, чем с 1,2,3,4. например:
NULL, NULL, NULL, 1, 2, 3, 4
Есть ли способ добиться следующего заказа:
1, 2, 3, 4, NULL, NULL, NULL.
mysql
sql-order-by
JonB
источник
источник
Ответы:
MySQL имеет недокументированный синтаксис для сортировки нулей в последнюю очередь. Поместите знак минус (-) перед именем столбца и переключите ASC на DESC:
Это, по сути, обратное
position DESC
размещение значений NULL последними, но в остальном то же самое, что иposition ASC
.Хорошая ссылка здесь http://troels.arvin.dk/db/rdbms#select-order_by
источник
- col_name
это выражение (0 - col_name
), которое принимает предложение ORDER BY. Конечно, это работает только для числовых столбцов.date
иtime
колонки тоже! (MySQL 5.5). Я думаю (мне лень проверять) это работает для всех числовых столбцов (timestamp, float ...).Я нашел это, чтобы быть хорошим решением по большей части:
источник
SELECT * FROM table ORDER BY ISNULL(field) ASC;
(MySQL 5.5)NULLS LAST
|NULLS FIRST
перевернуть его вместо обходных путей здесь.Что-то вроде
Замените 999999999 на максимальное значение для поля.
источник
NULL LAST
источник
Вы можете поменять экземпляры NULL с другим значением, чтобы отсортировать их сначала (например, 0 или -1) или в последнюю очередь (большое число или буква) ...
источник
Попробуйте использовать этот запрос:
источник
Вы можете объединить ваши NULL в
ORDER BY
утверждении:Если вы хотите, чтобы значения NULL сортировались снизу, попробуйте
coalesce(position, 100000)
. (Сделайте второе число больше, чем все остальныеposition
в БД.)источник
источник
Для
DATE
столбца вы можете использовать:NULLS последний:
Бланки последние:
источник
Для достижения следующего результата:
1, 2, 3, 4, NULL, NULL, NULL.
ИСПОЛЬЗУЙТЕ синтаксис,
-(minus sign)
ставьте перед именем поля и используйте обратный тип_порядка (например: если вы хотите упорядочить по порядку ASC, используйте DESC или, если вы хотите порядок DESC, используйте ASC)SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC
источник
Это работает нормально:
источник
Почему бы вам не заказать NULLS LAST?
источник
NULLS LAST
- какая версия MySQL была представлена?