Запрос с правильным выводом

Coffin

Новичок
Запрос с правильным выводом

Структура таблицы
+------+------------+------+------------+
| catid | parentid | level | catname |
+------+------------+------+------------+

|1|1|0|fcat|
|2|1|1|scat|
|4|2|2|tcat|
|7|7|0|focat|
|8|7|1|ficat|
|9|7|1|sicat|
|11|2|2|secat|

catid - ИД категории
parentid - родитель
level - уровень вложенности
catname - название

требуется вывести в таком виде
fcat
—scat
——tcat
——secat
focat
—ficat
—sicat
 

Coffin

Новичок
В том как сделать ORDER BY {что-то}
Получается в каком угодно виде, но не в том, что надо.
В этом проблема.
 

Фанат

oncle terrible
Команда форума
level в этой таблице - лишнее.
а выводят такие деревья с помощью рекурсии.
если размер таблицы небольшой, то можно запросить все записи подряд, а потом рассортировать в скрипте.
 

dub

Новичок
Люди юзайте деревья
http://phpclub.ru/detail/article/db_tree
http://phpclub.ru/detail/article/2002-06-03
и будет вам счастье.
 

dub

Новичок
Фанат
ну так в чем тогда проблема. http://phpclub.ru/detail/article/db_tree тут вроде бы как готовый пример. единственное что я бы рекурсией все таки разберал резултат запроса, а не использовал запросы в рекурсии. (как вариант можно создать левый/правый индекс по catid parentid, тогда level будет точно не нужет + возможность выбирать нужную ветку одним запросом.) Вобщем не буду дальше отвлекать вас от столь интересной дискуссии на тему а есть ли жизнь на марсе, все достаточно очевидно и смысла в развитии темы не вижу.
 

Фанат

oncle terrible
Команда форума
dub
http://phpclub.ru/detail/article/db_tree тут вроде бы как готовый пример
а ты подумал - а нужен ли здесь этот пример?

Вы, пхп-программисты, ей-богу - как язычники какие-то. Шаман сказал, "деревья - это нестед сетс!", и пипец.
Других мнений быть не может.

Это при том, что общее количество элементов в дереве редко превышает пару десятков. И достаточно их выбрать все разом, и в скрипте построить хоть всё дерево целиком, хоть одну ветку.
Это при том, что при хранении полного пути к элементу, все операции упрощаются в разы! Но опять же - нестед сетс - это синоним слова деревья.
 

Coffin

Новичок
Да у меня и выводится рекурсией... тока не тут
я просто подумал, а может можно тут запрос сформировать такой, что б без рекурсии...
ну нет так нет.
 

Фанат

oncle terrible
Команда форума
"Тут" запрос без рекурсии сформировать нельзя. У тебя в базе не хватает данных для того, чтобы строить без рекурсии. Какие данные для этого нужны, и как строить запрос, читай по ссылкам, которые дал dub.
но если у тебя количество элементов в дереве не больше нескольких десятков, то прекрасно обойдёшься и рекурсией.
 

dub

Новичок
Это при том, что общее количество элементов в дереве редко превышает пару десятков.
улыбнуло :)))

Coffin
для дерева описанного выше иногда использую такой алгоритм:
выбираю нужную мне ветку. выбираю элементы каждого уровня соответсвенно ветке и собираю рубрикатор. (как спорный вариант обхода рекурсии)
 

Coffin

Новичок
Автор оригинала: Фанат
"Тут" запрос без рекурсии сформировать нельзя. У тебя в базе не хватает данных для того, чтобы строить без рекурсии. Какие данные для этого нужны, и как строить запрос, читай по ссылкам, которые дал dub.
но если у тебя количество элементов в дереве не больше нескольких десятков, то прекрасно обойдёшься и рекурсией.
Оке.
Да у меня есть запись из 1500 эл-тов, так тоже прекрасно рекурсия справляется ;)
 

Фанат

oncle terrible
Команда форума
хм. а что такое "запись, состоящая из элементов"?
Ты хотел сказать - таблица?
А какое отношение эта "запись" имеет к выводу дерева?
 

Coffin

Новичок
ну я имел ввиду таблица с 1500 записями
просто таблицу назвал записью ибо тут отвлекали и пришлось написать не смотря на клаву, уж как вышло, извинте :)
 

Vallar_ultra

Любитель выпить :)
2Coffin
так а в чём проблема-то???
1500 записей в дереве - это не так уж и много.... какой предельный уровень вложенности имеется?
 

Фанат

oncle terrible
Команда форума
Coffin
записей 1500, но разделов-то на порядок, а то и на два - меньше?
 

Vallar_ultra

Любитель выпить :)
2Coffin
Тогда действительно с индексами лучше даже и не заморачиваться.... Нормальный рекурсивный запрос к БД и будет тебе оптимальное счастье :)

Кстати лучше сразу в запросе определять кол-во child-nodes и вызывать рекурсию тока там где больше нуля :)
 
Сверху