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
Форумы портала PHP.SU :: Версия для печати :: Выбор дочерних элементов (полностью ветки)
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Выбор дочерних элементов (полностью ветки)

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

1. 3d_killer - 06 Февраля, 2014 - 07:50:45 - перейти к сообщению
Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT

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

Благодарю за ответы
2. Мелкий - 06 Февраля, 2014 - 08:28:16 - перейти к сообщению
Только рекурсия. Выбор определённой ветви - это слабая сторона такого хранения дерева.
3. EuGen - 06 Февраля, 2014 - 09:32:41 - перейти к сообщению
Если речь об архитектуре - рекомендую посмотреть в сторону nested sets - а ещё лучше - closure table
4. Мелкий - 06 Февраля, 2014 - 09:38:58 - перейти к сообщению
EuGen пишет:
closure table

Как-то я пропустил эту структуру, спасибо. Нашёл такое объяснение что к чему: http://habrahabr[dot]ru/post/193166/
5. 3d_killer - 06 Февраля, 2014 - 09:56:29 - перейти к сообщению
написал рекурсию но что то не так не могли бы глянуть 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);
6. Мелкий - 06 Февраля, 2014 - 10:03:09 - перейти к сообщению
Так вы второй уровень получаете, но никуда не сохраняете.
7. MAXUS - 06 Февраля, 2014 - 18:31:08 - перейти к сообщению
3d_killer пишет:
Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT

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

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


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

 

Powered by ExBB FM 1.0 RC1