_ne_scaju_
У меня возник вопрос о системе комментариев, знаю вроде реализация не тяжелая, но объяснить принцип работы, не помешало бы, и примерно написать какие поля для комментариев обычно делают, спасибо. Могу и я кратко описать как вижу это я:
есть база в ней например три таблицы:
users(id, login, pass)
posts(id, uid, title, desc)
comments(id, uid, title, desc)
Для того чтобы добавить комментарий, нужно зайти на определенный пост:PHP:
запрос на получение постадальше под постов делаем форму для комментариев
HTML:ну и дальше ясным делом, если пользователь заполнил поля все правильно выполняем insert в базу.
а так же не забываем под формой ввода вывести уже существующие записи, на которые можно ответить. Это я кратко описал конечно принцип как я думаю.
А хотелось бы чуток больше узнать.
lastdays
comments ещё id_posts должен содержать (связь), время добавления, лайки/дизлайки мб
У меня 3 таблицы.
users — зарегистрированные пользователи на сайте
history — статьи
comments — таблица самих комментариевЗапрос выглядит примерно так
Код (Text):
SELECT `c`.*, `u`.`firstname`, `u`.`lastname`, `u`.`avatar` FROM `comments` `c` INNER JOIN `users` `u` On ( `c`.`autor_id` = `u`.`id` ) WHERE `c`.`id_history`=?i ORDER BY `c`.`id_comments` DESCНо у меня задача проще и комментариев миллиард не будет.
А так постраничную навигацию желательно делать или подгружать по запросу более старые комменты.
miketomlin
Ну, все правильно с учетом замечания из пред. поста, если нет вложенных комментов.
В посте можно закешировать кол-во комментов, о чем я вроде недавно тебе писал.
— Добавлено —Если пользователь авторизован, ему достаточно сам коммент написать. Не помню, чтобы встречал форму комментирования с полями login/pass. Обычно пишут «чтобы оставить коммент, авторизуйтесь (ссылка)». А для гостей помимо имени используют какие-то значимые идентификаторы вроде мыла/номера телефона.
— Добавлено —
P.S. Тайтл у комментов редко используется.
— Добавлено —Данные для сохранения отправляются методом POST. По GET ты сам пост с комментами выводишь (комменты можно отдельным AJAX-запросом вычитывать).
_ne_scaju_
понял, я хочу делать с вложенными комментами.
— Добавлено —согласен я написал на скорую руку не подумав о пост данных) Я хочу уточнить по поводу ответов на комментарий, это отдельная таблица или как?
miketomlin
Или как. Коммент, на который отвечаешь, – коммент-родитель для этого ответа. Нужна соотв. связь.
mkramer
А ты хочешь деревьями показывать такие коменты?
_ne_scaju_
ну да именно дерево скорее всего только типа так:
Код (Text):
пост 1: юсер1 комент юсер2 комент юсер3 комент юсер4 коментт.е. это доп. таблица нужна, или можно одной обойтись?)
_ne_scaju_
ясно сам напишу спасибо, код посмотрю в инете, отпишусь если что будет не получатся.
mkramer
Можно одной обойтись. Простого parentId достаточно. А в современной версии mysql вообще красота — появились рекурсивные иерархические запросы https://mysqlserverteam.com/mysql-8…traversal-transitive-closure-cycle-avoidance/
_ne_scaju_
как нибудь дойду и до этих рекурсий.
miketomlin
Если вложенность более 1 уровня, рекурсивный алгоритм все равно понадобится (хотя, как известно, рекурсия может разворачиваться в цикл с переключением уровней). Вообще на мой взгляд это отстой. У нас ни на одном сайте нет вложенных комментов.
_ne_scaju_
я передумал вложенные комментарии, но хотел бы так:
пользователь написал, и кто-то ему мог ответить на его коммент. как на форуме, пока не пойму сколько таблиц нужно)
miketomlin
Я же написал «Или как» После еще и mkramer повторил.
Ссылку на родителя можно использовать и без вложенных комментов, чтобы не заниматься глубоким анализом содержимого комментов (на предмет выуживания адресата или адресатов).
— Добавлено —
Единственный «минус» по сравнению с форумным «глубоким анализом» – в одном комменте может быть ответ только на один коммент, что в общем-то вполне норм., если не заниматься принудительным объединением смежных комментов, являющихся ответами на разные комменты.
_ne_scaju_
т.е. доп. таблица?
miketomlin
Нет.
— Добавлено —
Тебе уже десять раз написали о доп. поле для хранения ссылки на родителя. Причем тут доп. таблица? Что ты собрался в ней хранить?
_ne_scaju_
понял, parent_id, буду пробовать.