Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Запрос Mysql для построения Tree во Flex (Hamyachok) 06/09/2010 - 18:54:35
      Re: Запрос Mysql для построения Tree во Flex (FUKS) 16/09/2010 - 09:55:13
      Re: Запрос Mysql для построения Tree во Flex (Hamyachok) 22/09/2010 - 13:20:47

> Original message text:
> From: Hamyachok - 06/09/2010 - 18:54:35
> Subject:Запрос Mysql для построения Tree во Flex
> -----------------
> Здравствуйте!
> MySql изучаю совсем не давно, хотя кое - что уже изучил.
> Нужно составить вопрос в базу, чтоб выборка из одной таблицы создала ассоциативный массив массивов, при чем, неограниченного количества вложений.
> Как это сделать с помощью запроса так и не придумал, решил проблему с помощью PHP, но мне кажется есть и более рациональные способы решения данной проблемы.
> Вот алгоритм решения с помощью PHP:
> 1. Запрашиваю из базы всех родителей:
> $devices = select distinct * from table where `Id` in (select distinct `Id_par` from `table` group by `Id_par`) or `Id_par` = 0
> 2. Далее - запускаю цикл и начинаю подгружать всех наследников:
> for ($i = 0; $i < count($devices); $i++){
> $row = mysql_query("select * from `table` where `Id_par` = '".$devices[$i]["Id"]."'");
> 3. Нахожу и удаляю совпадающих наследников, являющихся родителями(во избежание повторений в узлах дерева):
> for ($k = 0; $k < count($devices); $k++){
> if ($childs[$j]["Id"] == $devices[$k]["Id"]){
> array_splice($childs, $j, 1);}
> 4. Далее заношу все подряд в массив родителей(начинаю выстраивать дерево)
> На этом этапе у меня есть одномерный массив массивов(одномерный, потому что, каждому элементу присвоен лишь один массив, если таков был. В глубину начинаю лесть сейчас).
> 5. Запускаю рекурсивную функцию, которая действует по следующему принципу:
> 5.1. Запускаем цикл сканирования всех родителей;
> 5.2. Проверяем каждый элемент на наличие наследника - Если таков есть запускаем цикл по новой с найденным наследником;
> 5.3. При отсутствии наследника, элемент присваиваем соответствующему родителю и удаляем из общего массива.
>
> В результате получаем массив массивов, который можно использовать как дерево во Flex'e.
>
> Функция работает и довольно шустро, но вот только работать с ней довольно проблематично - код большой, редактировать - сложно. В общем, решил спросить совета - можно ли составить такой запрос, чтоб хотя бы сократить часть или даже полностью убрать обработку PHP?
>
>
>
>


From: FUKS - 16/09/2010 - 09:55:13
Subject:Запрос Mysql для построения Tree во Flex
-----------------
Библиотечные функции могут возвращать, ряды, хэши, ссыылки на них, отдельные значения, а многоуровневые хэши в них вряд ли предусмотрены. Наверно стоит просто использовать выборку сразу в виде хэша, чтоб меньше дополнительной обработки делать, дубли не искать. Не совсем понятно откуда начинается построение дерева - от "корня" или от "листьев". Похоже, алгоритм просто избыточностью страдает.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37479



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |