Новости
Документация
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



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?





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

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

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



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