Ветка комментариев... зачем тут Nested Sets?

Spear

почемучка
Ветка комментариев... зачем тут Nested Sets?

Здравствуйте,

делаю комментарии к статьям. Необходимо чтобы можно было отдельно отвечать на каждый комментарий.

Я планировал сделать это так:
БД:
Таблица comments:
id - идентификатор комментария
pid - родетельский комментарий (если 0 - значит это комментарий к статье)
body - текст комментария
tid - идентификатор статьи.

Думал что все просто как два байта переслать - выбираею все комментарии для данной статьи,
а потом пробегаюсь по массиву в foreach и уже смотрю куда какуо комментарий вставить основываясь на id & pid.

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

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

Wicked

Новичок
Spear
Если ты уверен, что всегда будешь выбирать только все комментарии за раз, то тебе не нужно NS. NS нужен для более сложных выборок типа:
- выбрать поддерево (как в жж при нажатии на thread),
- выбрать только комментарии верхних двух уровней,
- выбрать всех "родителей" какого-то комментария,
- и т.д.

PS: у тебя пока что не просматривается четкого упорядочивания комментариев. Как ты собираешься их сортировать: по таймштампу или id? или введешь дополнительное поле order с цифрами от 0 до N ?
 

Angerslave

Новичок
Spear
В твоей реализации запрос-то может и один, но его обработка тяжёлая. В Nested Sets запрос тоже один, но его обработка куда легче. Но у Nested Sets есть такой солидный минус, который зачастую отпугивает от этой техники при разработки системы комментов - высокая нагрузка при добавлении комментов куда-либо в середину, и чем серединнее, тем серьёзнее нагрузка. Так что, имхо, проще рекурсивно-взятое дерево кешировать.
 

cranchzerro

Новичок
для конкретно твоего случая и потребности, что бы выгрести например всю подветку ветку, достаточно добавить просто level
а вообще-то, вопрос задан до того, как автор изучил мат-часть и разобрался с теорией.
поэтому, просто и по существу: добавь level
 

Фанат

oncle terrible
Команда форума
Некоторые для дерева комментариев используют структуру матерный путь, для получения дерева всех комментариев нужен только 1 запрос.
в том варианте который ты собирался использовать - тоже только 1 запрос, если комментариев ограниченное количество.
 
Сверху