Структура БД (я сознательно перепутал все, для наглядности.):
menuID | menuName | menuTitle | menuArrange 1 | menu-3 | Третий | 30 2 | menu-2 | Второй | 20 3 | menu-1 | Первый | 10 4 | menu-4 | Четвертый | 40Если во всех записях `menuArrange` заполнено, то всё замечательно, делаем запрос и получаем предсказуемый порядок:
SELECT menuArrange, menuTitle
FROM table_menu
ORDER BY menuArrange
/*
* 10 | Первый
* 20 | Второй
* 30 | Третий
* 40 | Четвертый
*/
Но зачем же заполнять вручную `menuArrange`? В большинстве случаев список будет заполняться сразу в нужном порядке, а вручную очередность указать нужно будет лишь иногда:menuID | menuName | menuTitle | menuArrange 1 | menu-1 | Первый | 2 | menu-2 | Второй | 3 | menu-3 | Третий | 4 | menu-4 | Четвертый | И тут мы решили добавить два пункта в самое начало: 5 | menu-0 | Нулевой | 20 6 | menu--1 | Минус 1й | 10И вот тут уже получается что для того, чтобы соблюсти правильную последовательность, нужно будет указать menuArrange для всех пунктов меню, иначе первые 4 будут болтаться в начале. Или же сделать так, чтобы все меню с пустым `menuArrange` прыгнули в самый конец списка. Этот вариант мне нравится намного больше:
SELECT menuArrange, menuTitle
FROM table_menu
ORDER BY
CASE WHEN menuArrange IS NULL THEN 1 ELSE 0 END,
menuArrange
/*
* 10 | Минус 1й
* 20 | Нулевой
* | Первый
* | Второй
* | Третий
* | Четвертый
*/
Немає коментарів :
Дописати коментар