|
|
|
| Где-то на форуме по-моему такое уже было.
Есть таблица
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 это узел первого уровня. Таких узлов много. Вопрос можно ли вытащить такую структуру одним запросом? Или придётся последовательно вытаскивать каждый уровень?
Спасибо. | |
|
|
|
|
|
|
|
для: Axxil
(22.03.2006 в 13:42)
| | Вытащить-то можно, вот только разбирать массив потом все равно придется кодом. Так что еще не известно что лучше. | |
|
|
|
|
|
|
|
для: Loki
(22.03.2006 в 13:46)
| | Мне желательно чтоб получился список всех строк из данной таблицы относящихся к заданному узлу с type=0 (или parent_id=0) и id=$value
Мне бы хотелось сократить количество запросов к базе, а то она и так слишком часто падает... | |
|
|
|
|
|
|
|
для: Axxil
(22.03.2006 в 13:48)
| | А насколько часто это дерево изменяют? Я имею в виду - нелистовые элементы. | |
|
|
|
|
|
|
|
для: Loki
(22.03.2006 в 13:46)
| | Если вытаскивание связей (полей id и parent_id) всего дерева - допустимо по ресурсам, то лучше вытащить скопом. | |
|
|
|
|
|
|
|
для: 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
|
Т.е. межтабличные связи видим. А можно тоже самое внутри таблицы провернуть? | |
|
|
|
|
|
|
|
для: Axxil
(22.03.2006 в 14:04)
| | Нельзя. Точнее можно, если все ветви одной высоты, но это вырожденный мало кому интересный случай.
Если дерево (не крона, а нелистовая часть) изменяется сравнительно редко, можно нормализовать таблицу, убрав крону в сторону (в другую таблицу).
Затем можно сделать еще одну (индексирующую) таблицу, которая позволила бы фильтровать весь набор узлов на нужные и лишние. | |
|
|
|
|
|
|
|
для: Trianon
(22.03.2006 в 15:13)
| | Понятно. Спасибо.
Пойдём пытать XML на эту тему. | |
|
|
|
|
|
|
|
для: Axxil
(22.03.2006 в 15:36)
| | А XML, по-моему, не гнушается грузить скопом чуть ли не весь файл в память. Так что я в этом направлении не пойду :) | |
|
|
|
|
|
|
|
для: Trianon
(22.03.2006 в 15:38)
| | Нет, тут как раз похоже тот случай когда XML оправдывает своё существование :)Лучше хранить каждый обьект (представленный выше) в своём файле. А структуру этих объектов тоже в XML загнать. Тогда получается такая мини-база на xml файлах. И в память будем грузить только нужный узел.
ИМХО для деревьев XML самое то. | |
|
|
|