Если вы изменили свои данные на
insert categories values (1 , 'Apparel ', 0 , 1)
insert categories values (2 , 'Sports ', 0 , 5)
insert categories values (3 , 'Hats ', 1 , 3)
insert categories values (4 , 'Weights ', 1 , 4)
insert categories values (5 , 'Lights ', 0 , 2)
Выход using the accepted solution
выходит как
1 Apparel 0 1
2 Sports 0 5
3 Hats 1 3
4 Weights 1 4
5 Lights 0 2
Это то, что вы ищете? Джеррат пытается спросить: это то, что ты ищешь?
1 Apparel 0 1
2 Sports 0 5
5 Lights 0 2
-------------------------------- << line for emphasis
3 Hats 1 3
4 Weights 1 4
т.е.. все непаренированные, до всех парентных, что производится по запросу ниже
SELECT *
FROM categories
ORDER BY parent,
CASE
WHEN parent = '1'
THEN menu_order
ELSE id
END;