Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Иерархия в таблице
 
 автор: Axxil   (22.03.2006 в 13:42)   письмо автору
 
 

Где-то на форуме по-моему такое уже было.
Есть таблица

id | parent_id | type | value

Она задаёт иерархию некоторых обьектов.
например она так заполнена

id | parent_id |        type |           value
1        0                0      keyword
2        1                1      search.php?page=1
3        2                2      www.site.com
                                     www.site.org
4        1                1      search.php?p=2
5        4                2      www.url.com
                                     www.site.de
                                     www.google.com

Что означает иерархию:

                                                 
                                          |-  www.site.com
                   |-  search.php?page=1  |-  www.site.org
keyword ->
                   |-  search.php?p=2  |-  www.url.com
                                       |-  www.site.de
                                       |-  www.google.com

Т.е. по сути это обычное дерево.
keyword это узел первого уровня. Таких узлов много. Вопрос можно ли вытащить такую структуру одним запросом? Или придётся последовательно вытаскивать каждый уровень?

Спасибо.

   
 
 автор: Loki   (22.03.2006 в 13:46)   письмо автору
 
   для: Axxil   (22.03.2006 в 13:42)
 

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

   
 
 автор: Axxil   (22.03.2006 в 13:48)   письмо автору
 
   для: Loki   (22.03.2006 в 13:46)
 

Мне желательно чтоб получился список всех строк из данной таблицы относящихся к заданному узлу с type=0 (или parent_id=0) и id=$value
Мне бы хотелось сократить количество запросов к базе, а то она и так слишком часто падает...

   
 
 автор: Trianon   (22.03.2006 в 13:56)   письмо автору
 
   для: Axxil   (22.03.2006 в 13:48)
 

А насколько часто это дерево изменяют? Я имею в виду - нелистовые элементы.

   
 
 автор: Trianon   (22.03.2006 в 13:54)   письмо автору
 
   для: Loki   (22.03.2006 в 13:46)
 

Если вытаскивание связей (полей id и parent_id) всего дерева - допустимо по ресурсам, то лучше вытащить скопом.

   
 
 автор: Axxil   (22.03.2006 в 14:04)   письмо автору
 
   для: Trianon   (22.03.2006 в 13:54)
 

А нет каких-то "внутритабличных" связей типа межтабличных
т.е. если бы это были три таблицы (по одной на каждый type) то проблем бы не было
Например

t1
id | value
1    keyword1
2    keyword2
t2
id | value           | t1_id
 1    search.php?p=1       1
 2   search.php?p=2        1
t3
id | value | t2_id
 1    bla        1
 2   bla bla     1


Тогда бы запрос вытаскивающий всё относящееся к keyword1 выглядел бы:

SELECT * from t1,t2,t3 where t2.t1_id=t1.id and t3.t2_id=t2.id and t1.id=1

Т.е. межтабличные связи видим. А можно тоже самое внутри таблицы провернуть?

   
 
 автор: Trianon   (22.03.2006 в 15:13)   письмо автору
 
   для: Axxil   (22.03.2006 в 14:04)
 

Нельзя. Точнее можно, если все ветви одной высоты, но это вырожденный мало кому интересный случай.
Если дерево (не крона, а нелистовая часть) изменяется сравнительно редко, можно нормализовать таблицу, убрав крону в сторону (в другую таблицу).
Затем можно сделать еще одну (индексирующую) таблицу, которая позволила бы фильтровать весь набор узлов на нужные и лишние.

   
 
 автор: Axxil   (22.03.2006 в 15:36)   письмо автору
 
   для: Trianon   (22.03.2006 в 15:13)
 

Понятно. Спасибо.
Пойдём пытать XML на эту тему.

   
 
 автор: Trianon   (22.03.2006 в 15:38)   письмо автору
 
   для: Axxil   (22.03.2006 в 15:36)
 

А XML, по-моему, не гнушается грузить скопом чуть ли не весь файл в память. Так что я в этом направлении не пойду :)

   
 
 автор: Axxil   (22.03.2006 в 16:04)   письмо автору
 
   для: Trianon   (22.03.2006 в 15:38)
 

Нет, тут как раз похоже тот случай когда XML оправдывает своё существование :)Лучше хранить каждый обьект (представленный выше) в своём файле. А структуру этих объектов тоже в XML загнать. Тогда получается такая мини-база на xml файлах. И в память будем грузить только нужный узел.
ИМХО для деревьев XML самое то.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования