ЧПУ ссылки и навигация

asterisk

Новичок
ЧПУ ссылки и навигация

есть таблица с деревом сайта:

id | parentId | hiddenName | hiddenUrl | name

id - уникальный ID записи
parentId - ID родительской записи
hiddenName - например "news"
hiddenUrl - например /company/about/news/
name - например Новости

Вопрос.
Возможно ли сократить количество запросов к БД для построения одной ветки дерева.

первое до чего догадался это експлодить hiddenUrl на составляющие в результате чего получаем:
/company/
/company/about/
/company/about/news/

т.е. 3 запроса для построения ветки дерева.

теперь не могу сообразить каким образом объединить результаты 3 запросов для визуализации менюшки на сайте, вернее каким образом отрисовать результаты 3 запросов но не тупо в столбик а в виде:

|- company
|----|- about
|---------|- news

единственное соображение это воспользоваться функциями из раздела "Вопрос-Ответ" (что то он у меня не открывается) для формирования вложенного массива а потом этот массив рекурсивно завернуть в HTML шаблон.

Правильны ли мои рассуждения?

ps. возможно ошибся разделом форума и нужно было вопрос запостить в разделе PHP, поэтому заранее приношу извинения :)
 

Фанат

oncle terrible
Команда форума
у тебя сколько всего разделов в меню? пара десятков ведь, не больше?
выбирай все одним запросом и дальше уже строй любые ветки в скрипте
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Примеры запросов есть?
 

asterisk

Новичок
Mr_Max
select name from nytable where hiddenurl = '/company/'
select name from nytable where hiddenurl = '/company/about/'
select name from nytable where hiddenurl = '/company/about/news/'

выборка с братьями. писал запросы от руки но в общем они отражают реальные запросы.


*****
выборка все дерева используется только для карты сайта.

А можно собсна по сабжу объяснить где я ошибаюсь(если вообще ошибаюсь)? Заранее благодарен.
 

Фанат

oncle terrible
Команда форума
Мля.
Диалог на грани фантастики.
- Научите, пожалуйста, есть кашу. А то вилкой неудобно!
- Берешь ложку и ешь.
- Ложкой низя! Я ложкой уже суп ем!

Ты можешь объяснить, как тот факт, что выборка всего дерева использвется для карты сайта, мешает тебе выбирать все дерево для построения веток?!
 

Фанат

oncle terrible
Команда форума
asterisk
что именно тебе непонятно?
как обойти рекурсивно массив и построить "вложенный"?
или как его вывести на экран?
 

asterisk

Новичок
sayber
я привел пример выборки необходимых узлов для построения "вложенной навигации". про синтаксис 'WHERE IN()' мне известно.

*****
я не совсем понимаю зачем для построения одной лишь ветки дерева нужно тягать все дерево.
Ну предположим выбрал я все дерево, тогда получается что при обходе этого массива придется накручивать дополнительные условия что бы в результате оставить только нужные узлы.
В моей голове сложилась картинка:
покупая в магазине хлеб я заодно беру еще сигареты и колбасу, выйдя из магазина я понимаю что я вообще не курю и не ем мяса и тупо выбрасываю сигареты и колбасу.
В результате затратил дополнительные ресурсы(деньги) что бы купить то что мне нафиГ не нужно и это выкинуть.

Я не прав?

-~{}~ 19.10.07 13:53:

как обойти рекурсивно массив и построить "вложенный"?
как минимум для этого есть готовые решения в разделе Вопрос-Ответ, поэтому тут проблем нет.
или как его вывести на экран?
я же написал что у меня нет проблем рекурсивно обежать вложенный массив и обернуть его в HTML темплейт.
 

Фанат

oncle terrible
Команда форума
нет. ты покупаешь набор за 10 рублей, в котором сигареты, хлеб и колбаса, чтобы не ходить по всем полкам, не искать, что тебе сейчас нужно - хлеб или масло. Причем сигареты и колбаса стоят копейку.
я же написал что у меня нет проблем рекурсивно обежать вложенный массив и обернуть его в HTML темплейт.
тогда непонятно, что означает вопрос
теперь не могу сообразить каким образом отрисовать результаты
то ты пишешь, что не понимаешь, как рисовать, то - что нет проблем завернуть в темплейт.

В чем проблема-то тогда?

-~{}~ 19.10.07 14:24:

теперь не могу сообразить каким образом объединить результаты 3 запросов
". про синтаксис 'WHERE IN()' мне известно.
чувак.
реально начинаешь раздражать
 

Ralph

Дикий столяр
Тут,по моему,скорее другая аналогия:заходишь ты в магазин и говоришь:"дайте мне 8 спичек,мне на сегодня больше не нужно,а завтра приду и возьму еще штучек шесть,чтобы на завтра хватило... "
 

Gas

может по одной?
Он просто не понимает что может сделать: select name from nytable where hiddenurl lke '/company/%'
Но для построения меню обычно всегда нужны и страницы первого уровня, так что выбирай все записи и не парься (если их не тыщи конечно).
 

asterisk

Новичок
Gas
если уж пишите что то вроде:
Он просто не понимает что может сделать:
то допускать ошибки типа:
выглядит как то не совсем кашерно ;)

финт: на кой черт мне таким запросом например выбирать ветку "/company/dealers/" если мне нужна ветка "/company/about/news/", разницу заметил? и это уже не говоря про бессмысленное использование Лайка.

Фaнат
реально тупанул, понимая что нужно будет рекурсивно обходить массив в php моск не мог понять зачем оно нужно.

просветление наступило. вопрос решился, вернее моск осознал необходимость рекурсивной функции.
 

Фанат

oncle terrible
Команда форума
эта ссылка к твоему случаю не имеет ни малейшего отношения
 
Сверху