Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подскажите как реализовать "количество непрочитанных комментов" для простой базы - посты и комментарии

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: mysql, php
inded
Отправлено: 16 Апреля, 2009 - 20:03:55
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2009  


Помог: 0 раз(а)




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

К примеру, таблицы:

posts (postID, postDate, postAuthorID)
comments (commentID, commentDate, postID, commentAuthorID)
users (userID)

Чтоб при выводе списка постов - можно было показывать сколько новых комментариев в каждом посте, не делая по запросу на каждый пост.

А также иметь возможность показывать юзеру количество непрочитанных комментариев во всех постах, в которых он писал или за которыми он захотел следить. При этом, не учитывать все остальные/новые посты.

Может есть где-то описание алгоритма?
 
 Top
SiemX
Отправлено: 16 Апреля, 2009 - 21:38:24
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Март 2009  


Помог: 0 раз(а)




Без запросов на каждый пост нельзя.

А непрочитаные делаем так. Добавляем в таблицу коментов еще одно поле и внем записываем иды юзеров прочитавшых комент через запятую например. А потом ищем текст '%,$iduser,%' искать именно с двумя запятыми ато однозначный ид буит софпадать с с многозначными. при просмотре страницы юзером всем постам на странице дописывать в это поле ид прочевшего юзера. Ну можно яваскриптом отслеживать перемещение юзера на странице и отправлять данные скрипту но эт лишнии гемор.
кста, если ты экономишь запросы то лучш не делать вывод непрочитаных потомучто это один лишний запрос на перезапись того поля где иды хранятся в табле

(Отредактировано автором: 16 Апреля, 2009 - 21:52:24)

 
 Top
inded
Отправлено: 17 Апреля, 2009 - 00:16:17
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2009  


Помог: 0 раз(а)




SiemX, спасибо за ответ.

Все же потребуется подсчет количества непрочтенных комментариев юзера в конкретном и во всех постах.

А каждая 1000 ID, прочитавших юзеров в каждом комменте - жестко.

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


UPD: Все, придумал как сделать.

(Отредактировано автором: 17 Апреля, 2009 - 02:28:40)

 
 Top
Stierus Супермодератор
Отправлено: 17 Апреля, 2009 - 10:30:40
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




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

id пользователя
id топика
last_cnt сколько постов в топике было, когда его прошлый раз смотрел пользователь

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

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

Ну и при разнице между last_cnt в новой таблице для конкретного пользователя и cnt у топика - делать выводы, добавились там посты или удалились или что

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

(Отредактировано автором: 17 Апреля, 2009 - 10:32:44)

 
My status
 Top
inded
Отправлено: 17 Апреля, 2009 - 14:18:22
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2009  


Помог: 0 раз(а)




Stierus, спасибо за столь подробный ответ.

Такое решение будет создавать безусловно меньшую нагрузку, чем то, что я реализовал

Решение нашел тут - http://stackoverflow[dot]com/questio[dot][dot][dot]ages-efficiently

Но для подсчета количества непрочитанных комментом в подписанных постах - придется грузить больше.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB