Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Проектирование БД для гостевой


Автор: krulik 24.4.2006, 11:50
Суть вопроса вот в чем. Есть гостевая. Сделал так чтобы юзеру  (в моем случае для группы админов) выводилось сообщении о новых собщениях с момента последнего визита. Так вот вопрос вот какой. Как сделать так чтобы после просмотра опредленных сообщений они отмечались как прочтенные (только для пользователя который просматривал) . Еслибы был один пользователь то вопросов бы не было, но так как юзеров много то как организовать подобное придумать не могу.

ЗЫ: если вопрос не понятен то спрашивайте. Попробую объяснить. 

Автор: chief39 24.4.2006, 14:31
Таблица, указывающая, что ДАННЫЙ юзер УЖЕ просматривл ДАННОЕ сообщение.
Код
create table seen(
    user_id integer not null,
    message_id not null,
    primary key(user_id, message_id)
)

Изначально - пуста. Когда юзер X просматривает сообщение Y в таблицу заносится запись (X,Y).
Привыборке непросмотренных сообщений - делай not in по месседжам, зарегистрированным в данной таблице (то есть отсекай все мессаги, которые тут зарегистрированы).

Чтоб табличка не выросла до небес - можно сделать так(предполагается что у месседжа есть дата создания):
в табличку user(или как она у тебя называется) добавь поле timestamp.
В этом поле будет храниться дата, ДО КОТОРОЙ ВСЕ МЕССАГИ ПРОСМОТРЕНЫ.
Если в момент просмотра мессаги НЕТ НЕПРОСМОТРЕННЫХ, НО СОЗДАННЫХ РАНЕЕ - тогда дату создания текущей мессаги переноси в user timestamp. Это означает что все более старые мессаги просмотрены. Соответственно ,все записи из таблицы seen для старых мессаг можно удалить.

Тогда при выборке непросмотренных мессаг надо будет выбрать ВСЕ, КОТОРЫЕ СОЗДАНЫ ПОЗЖЕ timestamp'a текущего юзера и отфильтровать те, которые зарегистрированы в табличке seen. Всё оставшееся - будет непросмотренными мессагами smile

Это не окончательный вариант - если решишь реализовать - пиши. 
Если будут траблы с логикой добавления/удаления/селектов - пиши - набросаю.

Добавлено @ 14:34 
ЗЫ: Если всё гораздо проще(вход юзера на гостевую во время X автоматически считает что мессаги, созданные до этого времени - прочтены им) - тогда можно обойтись одним timestamp'ом у юзера. Но мне кажется, что ты имел в виду первый вариант. ;)  

Автор: Vit 24.4.2006, 15:22
Открываем любой букварь по базам данных, читаем главу "Отношение многие-ко-многим" 

Автор: kivan 4.5.2006, 14:49
Цитата(Vit @  24.4.2006,  15:22 Найти цитируемый пост)
Открываем любой букварь по базам данных, читаем главу "Отношение многие-ко-многим"  

 к примеру: 
http://www.zipsites.ru/books/raiordan_osnovy_relyats_bd/

Там, все интересующие вас вопросы, подробно расписаны.
Качаем и читаем...
толковая книжонца, советую прочесть!!!  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)