Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор дочерних элементов (полностью ветки)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Выбор дочерних элементов (полностью ветки)
3d_killer
Отправлено: 06 Февраля, 2014 - 07:50:45
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT

Меню неизвестной вложенности, мне необходимо при известном ID элемента выбрать все его подчиненные элементы и подчиненные элементы этих элементов и т.д. то есть полностью ветку получается.
Возможно как то сделать это попроще или строить рекурсивную функцию?
на выходе мне необходимо получить массив из ID всех элементов ветки

Благодарю за ответы
 
My status
 Top
Мелкий Супермодератор
Отправлено: 06 Февраля, 2014 - 08:28:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Только рекурсия. Выбор определённой ветви - это слабая сторона такого хранения дерева.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 06 Февраля, 2014 - 09:32:41
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если речь об архитектуре - рекомендую посмотреть в сторону nested sets - а ещё лучше - closure table


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Февраля, 2014 - 09:38:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




EuGen пишет:
closure table

Как-то я пропустил эту структуру, спасибо. Нашёл такое объяснение что к чему: http://habrahabr[dot]ru/post/193166/


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 06 Февраля, 2014 - 09:56:29
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




написал рекурсию но что то не так не могли бы глянуть 2 уровень не набивает Недовольство, огорчение
PHP:
скопировать код в буфер обмена
  1.  
  2. $category=all_id_category(0,0);
  3. //Функция получения категорий
  4. function all_id_category($id,$index)
  5.         {
  6.                 if($id!==0){$category[$index]=$id; $index++;}
  7.                 global $DBH;
  8.                 $id_category = $DBH->prepare("SELECT id,name FROM table_catalog WHERE parent=:parent");
  9.                 $id_category->bindParam(':parent',$id);
  10.                 $id_category->execute();
  11.                 while($res=$id_category->fetch())
  12.                         {
  13.                                 $category[$index]=$res['name'];
  14.                                 $index++;
  15.                                 all_id_category($res['id'],$index);
  16.                         }
  17.                 return $category;
  18.         }
  19. var_dump($category);
  20.  

(Добавление)
забыл сложить массив одномерный:
PHP:
скопировать код в буфер обмена
  1. $category=$category+all_id_category($res['id'],$index);

(Отредактировано автором: 06 Февраля, 2014 - 10:01:30)

 
My status
 Top
Мелкий Супермодератор
Отправлено: 06 Февраля, 2014 - 10:03:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Так вы второй уровень получаете, но никуда не сохраняете.


-----
PostgreSQL DBA
 
 Top
MAXUS
Отправлено: 06 Февраля, 2014 - 18:31:08
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




3d_killer пишет:
Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT

Меню неизвестной вложенности, мне необходимо при известном ID элемента выбрать все его подчиненные элементы и подчиненные элементы этих элементов и т.д. то есть полностью ветку получается.
Возможно как то сделать это попроще или строить рекурсивную функцию?
на выходе мне необходимо получить массив из ID всех элементов ветки

Благодарю за ответы


А насколько большой каталог? Сколько строк? Я имею в виду во всей SQL таблице?

(Отредактировано автором: 06 Февраля, 2014 - 18:31:35)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB