![Сортировка данных MySQL](//serblog.ru/wp-content/uploads/2024/08/sorting.jpg)
Всем привет. Совсем недавно появилась задача отсортировать данные в MySQL таблице таким образом, чтобы определенные данные шли в указанном порядке, а все остальные — по алфавиту. Сама таблица состоит из идентификатора (ID) и наименования (name). Изначально все данные из этой таблицы выводились без какой-либо сортировки, а тупо по порядку:
![Телеграм-канал serblog.ru](https://serblog.ru/wp-content/themes/Vetro/images/telega-roz.png)
Предпочтительный вариант сортировки
Наиболее «правильным» вариантом будет создание нового поля в этой таблице с типом (int) и уже по нему делать нужную сортировку. При желании можно сделать интерфейс для пользователей, у которых будет возможность самостоятельно менять порядок элементов, выведенных на страницы. Возможно даже перетаскиванием. Предположим у нас есть таблица на 1000 строк. Пусть это будут города. И вам нужно первые 10-20 городов вывести в определенном порядке, а все остальные — после уже по алфавиту. Вероятно по умолчанию у нового поля все значения будут NULL, так как заполнять их вручную вы явно не захотите. Поэтому запрос будет таким:
1
2
| SELECT * FROM city ORDER BY `sorting`
IS NULL, `sorting` ASC, `name` ASC |
SELECT * FROM city ORDER BY `sorting`
IS NULL, `sorting` ASC, `name` ASC
Получаем результат:
![Сортировка SQL](//serblog.ru/wp-content/uploads/2024/08/file1.png)
Способ сортировки 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 |
SELECT id, name
FROM city
ORDER BY FIELD(id, 1, 6, 2, 4, 7, 3, 79, 108, 89, 110, id), `name` ASC
На выходе получаем:
![сортировать данные sql](//serblog.ru/wp-content/uploads/2024/08/file2.png)
Как вы понимаете, в скобках мы перечисляем ID, которые будут идти по порядку. Возможно для кого-то этот вариант окажется предпочтительней, так как нет необходимости создавать новое поле в таблице. Но тогда могут возникнуть сложности с веб-интерфейсом, если он конечно вам нужен. А в целом сортировка SQL в определенном порядке и по алфавиту будет работать так же хорошо.
Если у вас есть еще идеи по данной теме, то прошу высказать в комментариях.
Добавить комментарий