Какой тип хранения дерева лучше выбрать для ...?

Статус
В этой теме нельзя размещать новые ответы.

HraKK

Мудак
Команда форума
Insert не так критичен как select. С точки зрения пользователя.

1 коммент в 5 сек - не нагрузка для MySQL так что не придумывай проблемы на ровном месте.
 

Wicked

Новичок
если сделать _лес_ деревьев, то в условиях, что ты собираешься выводить _все_ комментарии на странице - тормозов на инсертах не будет ни-ка-ких.
 

JIEXA

Новичок
Не сочтите меня за нуба, просто за 3 года программирования на PHP не когда не требовалось использовать деревья(сам не понимаю, как так получилось). Поэтому дальше возможно я ошибусь:
Как я понял, структура должна быть такая:
CREATE TABLE comments (
id int(10) unsigned NOT NULL auto_increment,
left int(10) unsigned NOT NULL default '0',
right int(10) unsigned NOT NULL default '0',
level int(10) unsigned NOT NULL default '0',
tree int(10) unsigned NOT NULL default '0',
PRIMARY KEY (cid),
KEY cleft (cleft, cright, clevel)
) TYPE=MyISAM;

где tree это уникальный индетификатор дерева.

И при выборке указать условие WHERE tree='id_нужного_мне_дерева'

Правильно понял, или нет? Здесь на форуме подобного не обсуждалось? Я искал - не нашел... но может я плохо искал?
 

dark-demon

d(^-^)b
ага, правильно, но я бы использовал более интуитивно понятные number или position вместо left и last_child вместо right
 

zerkms

TDD infected
Команда форума
dark-demon
это каким боком они более интуитивно понятные? ;)))))))))))
 

dark-demon

d(^-^)b
первое - порядковый номер узла
второе - порядковый номер последнего дочернего узла
а left и right - весьма абстрактны и требуют представления в уме дерева и определения, где там у него лево, а где право :)
 

zerkms

TDD infected
Команда форума
dark-demon
ты уверен, что ты представляешь, что такое нестедсетс? ;)
 

Wicked

Новичок
dark-demon
ты уверен, что при этом в дереве сохранятся все полезные витамины? :)

zerkms
+1
 

JIEXA

Новичок
Тогда ещё один вопросик: а без класса тут не обойтись? Не дадите мне пример запроса для INSERT`а нового дерева/потомка.
 

JIEXA

Новичок
Взял на рассмотрение код Котерова с кучей LEFT JOIN, что скажете по этому поводу?
что по этому поводу скажите?

-~{}~ 04.08.07 19:08:

если всё сделано хорошо, то дерево будет целостным, проверки не нужны...
Понимаете, я не разу не делал деревья. Мне сходу не сделать хорошо, мне сейчас вообще никак не сделать. :(

-~{}~ 04.08.07 19:43:

Вообщем ну нафиг все эти Nested Sets и т.д. Пока разберешься во всём этом, уйма времени пройдет. Решил сделать всё просто как раз два три:

БД:
id
tree
level
fieldorder

tree - уникальный индетификатор дерева
level - уровень
filedorder - по этому полю сортируем значения

к примеру представим есть следующие записи в БД

id | tree | level | fieldorder
--------------------------------------
1 1 1 1
2 1 1 2
3 1 2 3
4 1 3 4
5 1 3 5

Выведется все это так:
- 1
- 2
--3
---4
--5

Теперь предствим, что кто-либо ответил на коммент с ID 4.
У него filedOrder равен 4(следовательно у нового коммента будет 4+1), а level равен 3(у нового коммента будет 3+1)
--
LOCK TABLE comments WRITE #Блокируем таблицу на запись
UPDATE comments SET fieldOrder=filedOrder+1 WHERE fieldOrder>4 and tree=1 #Увеличиваем значение записей на 1
INSERT INTO comments SET tree='1', level='5', fieldOrder='4' # Добавляем новый коммент
UNLOCK TABLES #Разблокируем

А если человек не кому не отвечал, а просто писал коммент, то получится так:

LOCK TABLE comments WRITE #Блокируем таблицу на запись
SELECT max(fieldOrder) FROM comments WHERE tree = '1'#Находим максимальное значение fieldOrder в текущем дереве,
INSERT INTO comments SET tree='1', level='1', fieldOrder='_сюда_вставляем_значение_из_прошлого_запроса' # Добавляем новый коммент
UNLOCK TABLES #Разблокируем
 

zerkms

TDD infected
Команда форума
в факе достаточно подробно описано несколько методик хранения деревьев
почему бы не почитать там?
 

JIEXA

Новичок
а что мне там читать? я нашел хороший вариант для себя(см. выше), выложид здесь нормальное описания, для того чтобы другим было потом легче...
 

JIEXA

Новичок
Фу мля, за что не люблю этот форум, так это за то, что большентсво старичков - ботаники, которые любят выпендрится перед тем, кто задал вопрос. Ну да, вприцнипе, что же поделаешь, если в реальной жизни обсирают все, то надо хоть в виртуальной поднять себя.

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

JIEXA

Новичок
А что я не прав? Я пока искал в поиске вариант решения моей задачи, видел кучу тем, где топикстартеров "опускали" старичики форума...
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху