![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| patap |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
помогите дельным советом, как правильнее реализовать такую вот штуку:
есть к примеру какой-то текст, который юзера могут комментировать нужно сделать, чтобы была возможность в комментариях отвечать пользователю на его коммент. вот пример:
как это лучше сделать? я начал так, когда отвечаем юзеру на коммент, то его ид заносится в поле to_user, но потом понял что не могу достать имя юзера, которому ответили. т.к если это "комментарий ответ", то нужно в результате вернуть два пользовательских имени. в принципе можно через временную таблицу, достать во временную таблицу имена юзеров, которым был ответ, а потом сджойнить ее с основным результатом, но не уверен оптимальности. либо добавить поле в таблицу comments to_username, и записывать в него имя пользователя, которому был ответ, но это будет дублирование данных.. в общем такая вот ситуация, может я чего-то не догоняю и тут все намного проще...
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||||
|
|||||||
| patap |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
пока что сделал так:
вот результат
единственное что беспокоит - это временная таблица, т.к. имя этой таблицы будет генерироваться динамически при каждом запросе на получение комментариев. Т.е. при каждом запросе будет создаваться уникальная временная таблица, разумеется она после завершения сеанса с БД будет удаляться, но вот к примеру если будет около сотни обращений в один момент или больше, не выйдет ли это боком? Добавлено через 7 минут и 16 секунд либо может быть возложить это на плечи PHP... т.е сделать так: сначала достать тех юзеров для которых есть сообщения "ответ"
потом достать собственно сообщения
ну и обработать это все на стороне PHP... Есть, что у кого посоветовать? -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||||||
|
|||||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Комменты на комменты - получается дерево. Нужно пилить в сторону "хранение деревьев в базе данных" и применять полученные знания.
Ветка дерева "нулевого" уровня - комментарий на статью. Ветка ненулевого - комментарий на комментарий. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
ksnk, спасибо.
я с деревьями знаком. В данном случае нет необходимости строить дерево, основная идея в том, что если юзер1 отвечает юзеру2, то это значит, что это сообщение привязано просто к юзеру2, но не к сообщению от юзера2. т.е. другими словами нужно получить запись, чтобы в ней фигурировало имя юзера которому ты хочешь что-то сказать. это наподобие того, как на этом форуме, когда пишешь и хочешь вставить чье-то имя в пост - нажимаешь на ник участника и имя вставляется в тело сообщения. можно было бы, тоже вклеить имя юзера в сообщение, но тогда нужно ограничить юзера в действиях по смене ника блин, хрень какая-то... ЗЫ а парент ид наверно добалю для сообщения, так про запас. -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| Nigel |
|
|||
|
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
Какая задача-то? Цитирование сделать как здесь? Тогда просто обрамляешь текст в \[QUOTE\]\[/QUOTE\] и парсишь регулярками.
Это сообщение отредактировал(а) Nigel - 4.4.2011, 23:37 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Видимо, не просто фигурировало, а еще и искать по нему можно было впоследствии. Имя юзера вставляется просто в тегах. Чтобы была ссылка на оригинального юзера - нужно добавлять поле в таблицу комментов. А вот что делать, если один комментарий ответ сразу нескольким юзерам? Слишком сложно получается. Сменить ник - не такая уж и криминальная операция, чтобы её стоило запрещать, так что искать следует только по ID пользователя. Можно навернуть специальный вид "сообщения" - в начале текстом вставляются ID пользователей в обрамлении специальных символов. Эти символы при выводе вырезаются регулярками, при поиске по ним ищем оператором LIKE. Хотя все равно ерунда какая-то, для большого количества комментариев будет тормозить. Лучше сделать деревья и жить как положено. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
с утра посмотрел на это все, и решил что для моего случая, будет идиальным вариантом - просто лента комментов, без всяких вые..новвот этих вот прибауток
все равно спасибо, быть может без советов полез бы в ненужные дебри... -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| Vreden |
|
|||
|
Idiotic Admin ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 12.7.2006 Репутация: нет Всего: 1 |
ХМ... Не уверен что суть вопроса мне ясна, но я реализовал коммент на коммент следующим образом, в форме отправки комментария у меня есть скрытое поле со значением CommentAnswer и когда юзер тычет на кнопку "Цитировать", расположенную у каждого комментария, CommentAnswer присваивается ID цитируемого комментария, заносим его в базу и при выводе данного комментария по ID того коммента вытаскиваю имя юзера и все остальные потроха. Ничего зазорного в том, чтобы для этих целей хранить еще одно поле в таблице не вижу.
-------------------- Чё? Как? © |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |