Взял на рассмотрение код Котерова с кучей 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 #Разблокируем