[Закрыть]
 
popoff.donetsk.ua
Самое лучшее, что могут сделать друг для друга люди, это улыбнуться.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Программирование на PHP - Иерархическая БД - Tree

Иерархическая БД - Tree

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Maximark
Mack
Янв, 2007
Сообщений: 3
Maximark url://forum.message:1809
Иерархическая БД - Tree

Имеем 2 таблицы.

1- Дерево (tree)

id | pid | page | level |
 1    0    ru       0
 2    1    about    1

и т д


2- Таблица ссылок (т.е. информация о каждой странице)

id | pointer (указывает на id(tree) | title ||||||||| и т д
1     1                               Русский
2     2                               О компании


Помогите с запросом

Нужно получить

B.*  в зависимости от query например ru/*  (причем не колонками...)

везде был:
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
http://phpclub.ru/faq/wakka.php?wakka=Tree/Ni&v=lxt

не помогает

У меня есть вариант: хранить в tree  - весь путь дерева т.е.  ....| id1 | id2 | id3 ....

Такой вариант работает  и очень быстро.... на 40000 = Time query: 0.0021

SELECT

 

(if(T.id2=T.id, T.id1,
if(T.id3=T.id, T.id2,
''))) as pid,


    

concat(
ifnull(concat('', T1.page ), ''),
ifnull(concat('/', T2.page ), ''),
ifnull(concat('/', T3.page ), '')
) as path,

B.*

FROM
 a_tree1 T,
 a_base1 B

left join  a_tree1 T1 on T.id1 = T1.id
left join  a_tree1 T2 on T.id2 = T2.id
left join  a_tree1 T3 on T.id3 = T3.id

WHERE
 T.id  = B.pointer

and (T1.page ='' )
and (T2.page ='ru' )
and (T3.page ='about' )

and (T.id10=0)

GROUP by B.pointer
order by T1.sort , T2.sort , T3.sort

но недостаток  как и у NS - если переносить ветку то надо пересчитывать много

хотелось бы не хранить излишние данные.

Help Please

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:1810

причем не колонками

Maximarkфорумы popoff.donetsk.ua

Что значит «не колонками»? Какие другие способы есть?

но недостаток как и у NS - если переносить ветку то надо пересчитывать много

хотелось бы не хранить излишние данные.

Maximarkфорумы popoff.donetsk.ua

В приведённом Вами запросе не используется это:

хранить в tree - весь путь дерева т.е. ....| id1 | id2 | id3 ....

Maximarkфорумы popoff.donetsk.ua

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Maximark
Mack
Янв, 2007
Сообщений: 3
Maximark url://forum.message:1812

Вот принцип построения ядра моей CMS

http://forum.dklab.ru/sql/php/NovayaIdeologiyaPostroeniyaIerarhicheskoyBd.html

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:1813

Maximark,
Предолженный Вами принцип фактически является модификацией (вариантом) материализованных путей. С соответствующими достоинствами и недостатками.

Если Вам хочется использовать материализованные пути, то рекомендую Вам путь хранить в виде строки, а не каждую вершину в отдельном поле.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Maximark
Mack
Янв, 2007
Сообщений: 3
Maximark url://forum.message:1814

Like тормоз....поэтому пришлось заменить вершины на колонки
Там оптимизация индексов гараздо лучше...соответсвенно гараздо быстрее... (кстати такой вариант используют многие коммерческие программы, я его не изобретал :) подсмотрел в Акценте (программа автоматизации работы предприятий MicrosoftSQl)
недостаток один -> при ПЕРЕМЕЩЕНИИ ветки - пересчет вершин, в принципе тоже что и в NS...но

Но суть не в том...суть в идеологии ООП к ИБД

что убирает недостаток ИБД в том что дитя не может иметь много предков... в принципе тоже не изобретение это самый натуральный ООП, но вот совмещение этих моментов дало неплохую идеологию построения CMS

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:1815

Maximark,

что убирает недостаток ИБД в том что дитя не может иметь много предков

Maximarkфорумы popoff.donetsk.ua

Если Вам не подходят деревья (которые являются частным случаем графа), а нужны именно графы в самом полном смысле, то структуры данных, которые используются для хранения деревьев, Вам не подходят. Вам нужны структуры данных, которые используются для хранения графов.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Обмен электронных валют
money.dn.ua