Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 20.02.2011, 21:34   #1
Специалист
 
Аватар для BMG
 
Регистрация: 14.09.2007
Сообщений: 271
Вес репутации: 215
BMG - как роза среди колючекBMG - как роза среди колючекBMG - как роза среди колючек
По умолчанию Как построить дерево?

Код:
ID | Name   | father | mother
----------------------------
01 | child  |    02   |  03
02 | father |    04   |  63
03 | mother |    12   |  51
...
и т.д.
Подскажите, пожалуйста, как из такой таблицы построить дерево?
Примерно такого вида
Untitled-1.jpg

Может есть какой нибудь алгоритм? Ничего, кроме запроса к базе для каждой ячейки, в голову не приходит
BMG вне форума   Ответить с цитированием
Старый 20.02.2011, 22:57   #2
Специалист
 
Аватар для Frenk1
 
Регистрация: 19.07.2009
Сообщений: 240
Вес репутации: 195
Frenk1 - просто великолепная личностьFrenk1 - просто великолепная личностьFrenk1 - просто великолепная личностьFrenk1 - просто великолепная личностьFrenk1 - просто великолепная личностьFrenk1 - просто великолепная личность
По умолчанию

Сам сейчас занимаюсь этим же
Пока нашел тут много интересной инфы
http://phpclub.ru/faq/Tree/Ns?v=zz4
http://phpclub.ru/faq/Tree/Faq?v=lzx
Frenk1 вне форума   Ответить с цитированием
Старый 21.02.2011, 00:24   #3
Bannеd
 
Регистрация: 17.09.2008
Сообщений: 6,446
Вес репутации: 374
Последний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущее
По умолчанию

BMG, результатом исходных данных может стать более сложное дерево
Последний Герой вне форума   Ответить с цитированием
Старый 21.02.2011, 00:55   #4
Специалист
 
Аватар для BMG
 
Регистрация: 14.09.2007
Сообщений: 271
Вес репутации: 215
BMG - как роза среди колючекBMG - как роза среди колючекBMG - как роза среди колючек
По умолчанию

Frenk1, интересно, но на ночь глядя не осилить.
Последний Герой, нет, может менятся только количество уровней.
BMG вне форума   Ответить с цитированием
Старый 21.02.2011, 01:00   #5
Bannеd
 
Регистрация: 17.09.2008
Сообщений: 6,446
Вес репутации: 374
Последний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущееПоследний Герой - прекрасное будущее
По умолчанию

BMG, всмысле? я говорю вообще о том, что структура графа может быть и вовсе не деревом. а на картинке во вложении как раз и не дерево. дерево это связный граф без циклов.
Последний Герой вне форума   Ответить с цитированием
Старый 21.02.2011, 01:51   #6
Эксперт
 
Аватар для Anadonam
 
Регистрация: 29.10.2009
Адрес: Вологда and SSHA
Сообщений: 3,897
Вес репутации: 358
Anadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущее
Отправить сообщение для Anadonam с помощью ICQ
По умолчанию

нормальное дерево

Добавлено через 6 минут
одним запросм ты не извлекеш - смотри аналог работы файловой системы на компе - ведь файлы в папке отображаются тока тогда когда ты 2 раза cчелкнеш по папке прально ?

тоесть реальзация алгаритма зависит от вапроса - тебе надо сразу в развернутом виде или при шшелчке на родителя показывать "детей"

вот и всё - никакого перебора строк

2 запроса участвуют
- запрос SQL первый выбрать всех у кого нет родителей (для старта)
- второй выбрать всех у кого родитель указан (оно же проверка есть ли дети)

1 запрос - отобразить всех родителей !! важно - у таких родителй доджен быть внеiний ключ равен 00 (они произошли от бога)
1a - отбражаем родителй на экране
2 отображаем родителя одного - поверячем естьли у него дети - если да то отобажаем
если нет то отображдаем следующего родителя


всё

извеняюсь за ошибки - спехом писал )

Последний раз редактировалось Anadonam; 21.02.2011 в 02:00. Причина: Добавлено сообщение
Anadonam вне форума   Ответить с цитированием
Старый 21.02.2011, 22:06   #7
Специалист
 
Аватар для BMG
 
Регистрация: 14.09.2007
Сообщений: 271
Вес репутации: 215
BMG - как роза среди колючекBMG - как роза среди колючекBMG - как роза среди колючек
По умолчанию

Цитата:
Сообщение от Anadonam Посмотреть сообщение
тебе надо сразу в развернутом виде или при шшелчке на родителя показывать "детей"
Есть большое генеалогическое дерево. Надо в профайле персон отображать несколько поколений прямых предков. Т.е. надо идти наоборот, снизу вверх. Нужна рекурсивная функция.
Что-то типа такого:
PHP код:
function get_parents($persid$level=0) {
     
$level++
     if (
$level 4) {
         
$row="select name, father, mother from persons where id = $persid";
         ???? = 
$row['name'];
         ???? = 
get_parents($row['father'], $level);
         ???? = 
get_parents($row['mother'], $level);
     }
     return ????;

И как-то собрать результаты в кучу, чтоб потом вывести в таблицу как на картинке.
BMG вне форума   Ответить с цитированием
Старый 24.02.2011, 14:36   #8
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 254
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

BMG
Рекомендую вытягивать любое поддерево любой сложности ОДНИМ запросом к БД. Это реально, но для этого надо снабдить таблицу дополнительной информацией. Есть несколько алгоритмов на этот счет.

В своем движке я реализовал такую выборку. Причем даже сортировка детей в каждом узле выполняеется по полю сортировки, указанному в родителе. И на все про все делается только ОДИН запрос к БД.
boric вне форума   Ответить с цитированием
Старый 24.02.2011, 19:48   #9
Специалист
 
Регистрация: 29.02.2008
Сообщений: 121
Вес репутации: 207
Optimizator1 - очень-очень хороший человекOptimizator1 - очень-очень хороший человекOptimizator1 - очень-очень хороший человекOptimizator1 - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от boric Посмотреть сообщение
И на все про все делается только ОДИН запрос к БД.
Я одним запросом могу положить mysql на ближайший час.
Поэтому рекомендую выбирать эффективно, а не "одним" ... "стотыщпиццотдвумя" запросами.
Optimizator1 вне форума   Ответить с цитированием
Старый 24.02.2011, 20:09   #10
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 254
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

Optimizator1,
Цитата:
Я одним запросом могу положить mysql на ближайший час.
Никаких сложных запросов. Делается один простой и быстрый запрос к БД, выбирающий поддерево (только поддерево), без каких-либо группировок и прочих сложностей.
boric вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка строк при режиме вывода "дерево" JIucky Пожелания пользователей системы 0 06.10.2010 19:39
Как лучше построить ветку сайтов-филиалов? skolkov Общие вопросы оптимизации 24 08.08.2010 20:34
(Двоичное Дерево) С++ Очистка памяти heroin Курилка 10 05.12.2009 01:58
Сколько стоит дом построить? :) Tony Soprano Курилка 28 01.12.2009 14:29
Получить дерево папок V!rus Разработка и сопровождение сайтов 4 17.03.2008 22:22


Часовой пояс GMT +3, время: 05:10.