Сортировка SQL в определенном порядке и по алфавиту

    Комментариев нет 324

Сортировка данных MySQL

Всем привет. Совсем недавно появилась задача отсортировать данные в MySQL таблице таким образом, чтобы определенные данные шли в указанном порядке, а все остальные — по алфавиту. Сама таблица состоит из идентификатора (ID) и наименования (name). Изначально все данные из этой таблицы выводились без какой-либо сортировки, а тупо по порядку:

Телеграм-канал serblog.ru

1
SELECT * FROM TABLE

Предпочтительный вариант сортировки

Наиболее «правильным» вариантом будет создание нового поля в этой таблице с типом (int) и уже по нему делать нужную сортировку. При желании можно сделать интерфейс для пользователей, у которых будет возможность самостоятельно менять порядок элементов, выведенных на страницы. Возможно даже перетаскиванием. Предположим у нас есть таблица на 1000 строк. Пусть это будут города. И вам нужно первые 10-20 городов вывести в определенном порядке, а все остальные — после уже по алфавиту. Вероятно по умолчанию у нового поля все значения будут NULL, так как заполнять их вручную вы явно не захотите. Поэтому запрос будет таким:

1
2
SELECT * FROM city ORDER BY `sorting` 
IS NULL, `sorting` ASC, `name` ASC

Получаем результат:

Сортировка SQL

Способ сортировки SQL без добавления нового поля

Существует еще один вариант и он тоже имеет право на жизнь. В нем так же данные будут отсортированы по заданным характеристикам, а все остальные по алфавиту в порядке возрастания. Запрос, в этом случае, будет таким:

1
2
3
SELECT id, name 
FROM city 
ORDER BY FIELD(id, 1, 6, 2, 4, 7, 3, 79, 108, 89, 110, id), `name` ASC

На выходе получаем:

сортировать данные sql

Как вы понимаете, в скобках мы перечисляем ID, которые будут идти по порядку. Возможно для кого-то этот вариант окажется предпочтительней, так как нет необходимости создавать новое поле в таблице. Но тогда могут возникнуть сложности с веб-интерфейсом, если он конечно вам нужен. А в целом сортировка SQL в определенном порядке и по алфавиту будет работать так же хорошо.

Если у вас есть еще идеи по данной теме, то прошу высказать в комментариях.

Любая сумма на развитие сайта

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *