| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > группировка, сортировка и вывод дерева |
| Автор: slutsker 6.12.2012, 00:30 |
| добрый день, есть MySQL табличка категорий вида (у категории может быть категория родитель) id | name | parent_id пусть она имеет вид 1 Статьи 0 2 Спорт 1 3 Авто 1 ................ 90 Налоги 1 91 Повести 0 92 Русские 91 93 Европейские 91 ......... 120 Ремонт 1 как бы мне вывести записи из базы так, чтобы они были сгруппировали по parent_id и отсортированы по алфавиту и стало так Статьи __Авто __Налоги __Ремонт __Спорт Повести __Европейски __Русские |
| Автор: Akina 6.12.2012, 07:53 |
Максимальный уровень вложенности - фиксирован? |
| Автор: slutsker 6.12.2012, 10:28 | ||
| максимальный уровень вложенности, в настоящий момент, фиксирован - у дочернего элемента не может быть дочернего элемента это важное дополнение позволило решить задачу запросом вида
(решение подсказал очень грамотный специалист, за это ему большое спасибо) если вам известно, как это можно сделать для произвольного уровня вложенности средствами MySQL, пожалуйста, напишите |
| Автор: Akina 6.12.2012, 12:05 | ||
Просто изменить структуру хранения на ту, которая предназначена для хранения и обработки деревьев. Скажем, Nested Set. Добавлено через 5 минут и 41 секунду Если в данных будут изменения, и у какой-то категории потомок будет иметь ID меньше, чем родитель (почему нет?) - запрос вывалит чушь. Правильный вариант:
|
| Автор: slutsker 6.12.2012, 13:27 |
| странно, проверил приведенный мною запрос на случай, когда id родителя меньше id сына - он работает ваш запрос работает, но выдаёт в неправильном виде __Авто __Налоги __Ремонт __Спорт Статьи __Европейски __Русские Повести |
| Автор: slutsker 6.12.2012, 21:55 |
| вот с parent_id!=0 работает правильно (не понял ваш комментарий в первый раз) спасибо за рекомендацию Nested Set |
| Автор: Akina 6.12.2012, 23:25 |
Просто всегда забываю, в каких ЯП и СУБД True интерпретируется как 1, а в каких как -1... |