Хотя это может не быть ИДЕАЛЬНОЕ соответствие, оно очень близко к вложенному иерархическому представлению записей родитель-потомок в самосоединяющемся списке и включает в себя правильные проблемы упорядочения.Возможно, вам придется немного подправить его для вашей таблицы, но вот ссылка на предыдущее решение
Чтобы прояснить эту проблему с меню и соответствующими данными.
id | parentid | name
1 | 0 | CatOne
2 | 0 | CatTwo
3 | 0 | CatThree
4 | 1 | SubCatOne
5 | 1 | SubCatOne2
6 | 3 | SubCatThree
Желаемый вывод
CatOne 1
--SubCatOne 4
--SubCatOne2 5
CatTwo 2
CatThree 3
--SubCatThree 6
Первый случай - это предварительная группировка всех идентичных идентификаторов на основе родительского ... Итак, когда родительский идентификатор равен 0, это самый верхний уровень, поэтомумы держим это удостоверение личности.Затем, для всех детей, находящихся под ним, нам нужны соответствующие идентификаторы PARENT, чтобы все они были правильно сгруппированы.
Цель группы ВТОРАЯ - заставить запись, представляющую фактический элемент меню TOP LEVEL, в верхней части списка независимо от дочерних записей.
Допустим, у вас есть таблица, в которой идентификаторы уже установлены, и теперь вы добавляете новый элемент в позицию с идентификатором = 7 для «Нового верхнего уровня» и хотите переместить идентификаторы № 2 и 3 вновый "раздел верхнего уровня . Если вы просто выполните запрос с первым CASE, ваши записи будут смоделированы и возвращены как
ID Parent Name (natural order from the table)
2 7 CatTwo
3 7 CatThree
7 0 New Category. (we want THIS one in FIRST POSITION of the group)
Как видите, это было бы плохим представлениемпорядок подгруппы. Элемент верхнего уровня фактически находится на 3-ей позиции ... Чтобы вывести его на передний план, мы сейчас подгруппируемся и говорим ... если Parent ID записи = 0, то сортируем егокак если бы это был приоритет «1». Все остальное считается приоритетом «2» и имитирует результат, например
ID Parent Name SubPrioritySort
7 0 New Category. 1
2 7 CatTwo 2
3 7 CatThree 2
Поскольку вы фактически не возвращаете эти значения «CASE» в запросе результата,иначе вы бы не увидели это визуально ... но для ухмылки добавьте их как столбцы к вашему запросу, чтобы увидеть влияние. Надеюсь, это прояснило ответ для вас.
В вашем вопросе вы, очевидно, сможетедобавить свой сстолбец ort order на основе этого запроса.