Страница 1 из 2

деревовидные связи

Добавлено: 2009-02-05 0:16:37
ProFTP
постараюсь обяснить понятно!

есть сейчас:

Код: Выделить всё

раздел
  -- под раздел
     -- под-под раздел
нужно чтобы это было построенно программно сколько угодно подразделов!

Код: Выделить всё

раздел
  -- под раздел
     -- под-под раздел
         -- под-под-под раздел
            -- под-под-под-под раздел
как составить таблицы и как разделы эти вывести вывести из таблиц?

это не это http://gsbelarus.com/gs/modules.php?nam ... le&sid=314 ?


UPD:


вот нашел еще
http://www.realcoding.net/article/view/2771
http://www.opennet.ru/base/dev/mysql_tree.txt.html
http://www.phpclub.ru/detail/article/2002-06-03
http://www.google.com.ua/search?hl=uk&q ... 0%BA&meta=

геморойно там как-то смотрится

Re: деревовидные связи

Добавлено: 2009-02-05 2:04:38
ProFTP
нашел такую штутк, думаю подойдет

http://search.cpan.org/~bjeps/DBIx-Tree-1.9/Tree.pm

Re: деревовидные связи

Добавлено: 2009-02-05 12:39:42
Volodymyr
А причем тут MySQL? Задача по программированию.

Re: деревовидные связи

Добавлено: 2009-02-05 13:11:42
zg
мускул тоже может, это делается вроде на внешних ключах, но они есть только в innoDB. Правда не рекомендуюется использовать внешние ключи поскольку сильно мускул грузят

Re: деревовидные связи

Добавлено: 2009-02-05 14:53:00
Volodymyr
zg писал(а):но они есть только в innoDB. Правда не рекомендуюется использовать внешние ключи поскольку сильно мускул грузят
Дерево не задача SQL в таком случае тем более. MySQL тут для хранения данных.

P.S. http://phpclub.ru/detail/article/db_tree

Re: деревовидные связи

Добавлено: 2009-02-05 15:41:48
zg
Volodymyr писал(а):Дерево не задача SQL
где-то видел реализацию... надо ман покапать

Re: деревовидные связи

Добавлено: 2009-02-05 16:15:35
Volodymyr
zg писал(а):
Volodymyr писал(а):Дерево не задача SQL
где-то видел реализацию... надо ман покапать
Если найдешь, поделись, тема интересная.

Re: деревовидные связи

Добавлено: 2009-04-03 13:44:17
ProFTP
Volodymyr писал(а):
zg писал(а):
Volodymyr писал(а):Дерево не задача SQL
где-то видел реализацию... надо ман покапать
Если найдешь, поделись, тема интересная.
ну вот есть только не для муси, а для Firebird, Yaffil, Borland, Interbase. http://gsbelarus.com/gs/modules.php?nam ... le&sid=314


а как управлять с помошью HTML форм этим деревом? если я захожу переметсить какой-то раздел, т окак это сделать красиво, может с JS как-то?

Re: деревовидные связи

Добавлено: 2009-04-03 14:35:11
zg
ProFTP писал(а): может с JS как-то?
нет ничего невозможного :smile:

Re: деревовидные связи

Добавлено: 2009-04-03 14:38:36
ProFTP
а как упралвять?

просто родителей вынести и под родителей?

Re: деревовидные связи

Добавлено: 2009-04-03 14:42:35
zg
ProFTP писал(а):а как упралвять?
просто родителей вынести и под родителей?
дак попробуй :smile: руки ведь не отвалятся, чего зазря слова разговаривать.

Re: деревовидные связи

Добавлено: 2009-04-03 14:47:09
ProFTP
та прост окажется что оно глупо будет выглядеть

почему этот форум не деревовидный?

если бы посмотреть на прогармму деревовидную, или кто как делал?

Re: деревовидные связи

Добавлено: 2009-04-03 15:01:36
zg
ProFTP писал(а):если бы посмотреть на прогармму деревовидную, или кто как делал?
я делал, выглядит классно и вполне себе ничего работает

Re: деревовидные связи

Добавлено: 2009-04-03 15:11:21
ProFTP
а если я хочу раздел поставить в другую ветку, то мне надо всех родиетелей вывести?

Re: деревовидные связи

Добавлено: 2009-04-03 15:27:17
zg
ProFTP писал(а):а если я хочу раздел поставить в другую ветку, то мне надо всех родиетелей вывести?
начни делать и в процессе поймёшь как и чего. Все по разному мыслят, может так оказаться, что иерархические списки тебе и не понадобятся.

Re: деревовидные связи

Добавлено: 2009-04-03 18:53:36
MAK
Есть стандартный метод хранения дерева, где каждый элемент хранит id родителя. Для отрисовки такого дерева нужна рекурсия(то-есть по одному запросу в базу для каждой ветки).
Но в бытность я нашел еще один метод хранения - тут для всех действий(выбор пути, выбор ветки, добавление/удаление элемента) необходим только один запрос.
Как хорошо вставлять ссылки в код. )) Могу дать код.
http://www.sitepoint.com/print/1105/
Вот тут кстати и сравнивается первый метод и второй.

Re: деревовидные связи

Добавлено: 2009-04-03 19:16:34
zg
MAK писал(а):Но в бытность я нашел еще один метод хранения - тут для всех действий(выбор пути, выбор ветки, добавление/удаление элемента) необходим только один запрос.
для удаления добавления два, но особенно понравилось

Код: Выделить всё

   while ($row = mysql_fetch_array($result)) { 
       // recursive execution of this function for each 
       // child of this node 
       // $right is the current right value, which is 
       // incremented by the rebuild_tree function 
       $right = rebuild_tree($row['title'], $right); 
   }
способ интересный, правда, проверить целостность такой таблицы весьма сложно.

Re: деревовидные связи

Добавлено: 2009-04-03 21:05:00
MAK
zg писал(а):для удаления добавления два
Да, ошибся. ) Давно это было. А сейчас даже не удосужился пролистать статью, вспомнить.
Последний раз работал с ним 2 года назад.
Если быть точным, то этот способ позволяет двумя запросами(в обоих случаях первый - получить левый и правый индексы) отрисовать дерево и путь.
А вот для модификации его, нужно сделать больше телодвижений.
То-есть он применим там, где это дерево чаще будет показываться, чем модифицироваться.
zg писал(а):но особенно понравилось
А rebuild_tree() - это ж только для переколбашивания дерева из первой схемы во вторую.

Re: деревовидные связи

Добавлено: 2009-04-15 15:03:25
Gloft
все давно придумано
http://www.getinfo.ru/article610.html

к NESTED SETS есть php библиотека если нет времини или самому писать влом

Re: деревовидные связи

Добавлено: 2009-04-15 15:18:22
zg
Gloft писал(а):все давно придумано
так кто спорит то, новых идей нет и никогда не было, всё решает реализация.

Re: деревовидные связи

Добавлено: 2009-04-30 0:58:30
ProFTP
подскажите как вывести всех родителей какого-то id?

в принципе можно рекурсию сделать, но запросов может быть штук 10 (написано что это не совсем правильно)


как тут сделать JEFT JOIN и if else ?

Re: деревовидные связи

Добавлено: 2009-04-30 4:54:41
zg
ProFTP писал(а):подскажите как вывести всех родителей какого-то id?
смотря как у тебя реализовано хранение.
ProFTP писал(а):как тут сделать JEFT JOIN и if else ?
тут, это где?

Re: деревовидные связи

Добавлено: 2009-04-30 5:39:29
ProFTP
через parrent_id, связывается с id, то есть parrent_id получается родитель

Re: деревовидные связи

Добавлено: 2009-04-30 6:02:19
ProFTP
в крайнем случае можно, через ORM пройтись, сделать рекурсию, запросов возможно будет штук 20, но при обрабоке этих объектных запросов, ORM сделает 2-3 запроса SQL

Re: деревовидные связи

Добавлено: 2009-04-30 13:10:18
zg
ProFTP писал(а): запросов возможно будет штук 20
это много
ProFTP писал(а):через parrent_id, связывается с id, то есть parrent_id получается родитель
только рекурсивно или тупо выбрать все записи и построить из них дерево