Сделал простой форум Ну темы по категориям, страница темы, далее поль-ль добавляет свой коммент/ответ, и далее хотел сделать чтобы пользователю могли отвечать другие не на тему, а вот конкретному пользователю ну вы поняли короче)). Все делал на обычном РНР своими руками и столкнулся что я не понимаю как выводить эти ответы для конкретного пользователя )). Ну то есть можно кончено сделать ну типа будет написано Для такого то пользователя, но это не удобно и не красиво. Так не делают. А делаю как , вот есть ответ и под ни список ответов к этому ответу. Так вот как это сделать мозгов не хватает. Подскажите мастера как ??
https://php.ru/forum/threads/vyvod-kategorij-i-podkategorij.67928/ https://php.ru/forum/threads/nested-sets-derevo-php.64648/
Ребят а попроще сделать никто не знает как? Нутипа выводим в цикле while(mysqli_fetch_arraay($query)) { echo ' ЗДЕСЬ ВЫВОД ОВТЕТА И ДАННЫХ О ПОЛЬЗОЫВАТЕЛЕ '; while(mysqli_fetch_array($query2)) { echo ' ЗДЕСЬ ОВТЕТ К ЭТОМУ ПОЛЬЗОВАТИЕЛЮ '; } } и вот так вот я сделал но получаться что ID то уних как бы одинаковые получаются
В таблице с комментариями в таком случае хранят не id пользователя, а id комментария, которому предназначен ответ. Единственная проблема - что хранить в этом поле, когда комментарий адресован теме, а не другому комментарию. Вывод через единственный цикл врятли получится. Данные запроса сначала лучше разобрать и построить дерево, а потом выводить на страницу.
@Storm57, тебе как раз этот вариант посоветовал @ElisDN. Только там не просто цикл в цикле, а рекурсия. На каждый комент отдельный запрос к бд. Но есть один нюанс. Запросы в цикле, это удавка на собственную шею. И чем дольше будет работать твой форум, тем сильнее она будет давить.
@Storm57, чем тебя «сигнальные» обращение и цитирование не устраивают? Тем более на форуме. Меня лично даже в комментах деревья раздражают.
@miketomlin если делать только одну вложенность, то это ещё нормально, а когда их очень много, то тоже сильно раздражает. --- Добавлено --- @Valick надо выводить рекурсией не из базы, а формировать рекурсией вёрстку из готового массива.
для конкретного комментария, а не для пользователя. здесь говорят "nested set", не поясняя, что эта технология плохо работает для частых обновлений - а это как раз про комментрирование. она скорее для статичных рубрик, категорий контента. смотри "adjacency list". это простая ссылка на parent_id. p.s. п.м.с.м. вложенные комментарии не лучшее решение для форума. иногда тема разрастается на тысячи комментариев. если бы она была деревом, неудобно было бы искать свежие комментарии. и неочевидно как дерево разбивать на страницы. а если грузить всё сразу, это может быть напряжно для мобильного клиента. лента сообщений в календарном порядке выглядит более естественно, как по мне. а для указания контекста ответа подходит цитирование + обращение в стиле @username. читать: https://www.slideshare.net/ehildebrandt/trees-and-hierarchies-in-sql https://phpbuilder.com/handling-hierarchical-data-in-mysql-and-php/
p.p.s. посмотри ещё как организован пользовательский интерфейс на stackoverflow: есть ответы и комментарии. ответ это то, что претендует на звание "решения" для заданного вопроса. получается разумный компромис между иерархией и доступностью.
о да... конечно же я не понимаю, что в единицу времени комент пишет один человек, а читают сотни ТС спросил про дерево, про дерево я ему и ответил
@Valick это что, был сарказм? добавлять ноду во вложенные множества это дорогая операция. она может потребовать изменения чуть меньше чем всех существующих записей. об этом написано во всех руководствах по иерархическим структурам данных. --- Добавлено --- ты молодец, что ответил ТСу. я только дополнил твой ответ.
Всем спасибо ребят! Думаю остановлюсь на варианте самом простом. То есть просто будет помечаться что это ответ для такого то пользователя и все, без вложенных циклов. Ну типа как здесь, цитата добавляется и понятно для кого ответ. Так и проще и правильнее наверное, чтобы не напрягать сервер.
@Valick, ну это же известный факт, что вложенные множества хорошо подходят для редко изменяемых и/структур. Да и самому должно быть понятно, если знаешь принципы реализации основных действий над в/множествами, – при добавлении узла в среднем нужно половину узлов обновить. --- Добавлено --- Посты с «решениями» можно просто выделять особым образом, например фон подкрашивать или яркую шапку добавлять.
@miketomlin, не надо выдавать желаемое за действительное, я прекрасно знаю плюсы и минусы nested sets (уже наверно лет 10). Другой вопрос с чего вы с @artoodetoo взяли, что на форумы пишут гораздо чаще, чем читают, мне доподлинно не известно.
??? Наоборот я сильно удивился, услышав такой совет от тебя. Да, с таким аргументом трудно спорить. --- Добавлено --- Хотя все же рискну предположить, что пишут чаще, чем «раз в сто лет»
Это ты почему-то решил так за нас. Приписываешь свои мысли. Медленную отдачу страниц довольно просто ускорить кешированием. --- Добавлено --- А вот как ускорить запись, при которой надо апдейтить все узлы выше по иерархии и все узлы правее? Никак. --- Добавлено --- Предположим у нас есть кеш для ускорения чтения тем. Если "дерево комментариев" реализовано через AL, новый комментарий должен инвалидиповать только текущую тему. А если через NS, то новый комментарий должен сбросить кеш для множества тем, как следствие того что обновятся ключи туевой хучи узлов.