Страница 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
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 как-то?
нет ничего невозможного

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

руки ведь не отвалятся, чего зазря слова разговаривать.
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 получается родитель
только рекурсивно или тупо выбрать все записи и построить из них дерево