Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация древовидных комментариев 
:(
    Опции темы
NCIAC
Дата 13.1.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Здравствуйте.
Нужно реализовать на сайте комментарии к статьям как на хабре, например. То есть комментарии имеют уровни. Как это лучше сделать? То, как я себе это представляю, требует множество запросов к БД
PM MAIL   Вверх
patap
Дата 13.1.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



вот почитай для начала про nested sets. Отличная статья
http://www.getinfo.ru/article610.html


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Jimy
Дата 13.1.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Ищите в информацию по способам хранения деревьев в БД.
Ключевые слова: Adjacency List, Nested Sets, Materialized Path.
PM   Вверх
topy
Дата 13.1.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.2.2008

Репутация: 1
Всего: 1



Да, и обратите внимание на CSS
PM MAIL   Вверх
skyboy
Дата 13.1.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



на хабре комментарии не скрываются, как на каком-то livejournal. можно и для структуры "список смежности" выбрать все комментарии одним запросом и построить дерево комментариев.
PM MAIL   Вверх
NCIAC
Дата 13.1.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Цитата(skyboy @ 13.1.2011,  19:18)
на хабре комментарии не скрываются, как на каком-то livejournal. можно и для структуры "список смежности" выбрать все комментарии одним запросом и построить дерево комментариев.

Это вы к чему? уточните пожалуйста, что вы имели ввиду. 

Это сообщение отредактировал(а) NCIAC - 13.1.2011, 14:41
PM MAIL   Вверх
NCIAC
Дата 13.1.2011, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Цитата(topy @ 13.1.2011,  18:07)
Да, и обратите внимание на CSS

Зачем?
PM MAIL   Вверх
maxim1000
Дата 13.1.2011, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



для начала стоит перечислить, какие наборы комментариев захочется показывать, а уже потом строить структуру в БД, оптимизированную под эти потребности

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

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


--------------------
qqq
PM WWW   Вверх
NCIAC
Дата 14.1.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Цитата(maxim1000 @ 14.1.2011,  05:47)
для начала стоит перечислить, какие наборы комментариев захочется показывать, а уже потом строить структуру в БД, оптимизированную под эти потребности

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

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

И как же это сделать одним запросом? На мой взгляд это невозможно
PM MAIL   Вверх
skyboy
Дата 14.1.2011, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(NCIAC @  13.1.2011,  12:40 Найти цитируемый пост)
Это вы к чему?

не обязательно использовать навороченный nested sets, который предоставляет возможности выбрать "все потомки указанного узла" или "всех родителей указанного узла" одним запросом. можно использовать список смежности и вытягивать все комментарии одним запросом. и за один проход строить их в дерево на стороне РНР. для вывода в HTML использовать рекурсивную функцию.
PM MAIL   Вверх
maxim1000
Дата 14.1.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



синтаксис я уже мог подзабыть, но что-то такое:
Код

select * from comments where article_id=123

это выдаст все комментарии к статье
а уже потом можно анализировать их отношения "родитель-потомок", чтобы вывести в правильном порядке и с правильными отступами


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.