2011-01-20 4 views
0

Я разрабатываю систему входящих сообщений, в которой используется потоковая компоновка сообщений. На данный момент я пытаюсь обновить статус сообщений. Возможно, у меня неправильная структура, поэтому я мог бы сделать некоторые рекомендации.Чтение статуса сообщений в папке «Входящие»

Вот что у меня есть:

 
Table messages 
============== 
id 
thread_id 
from_user_id 
subject 
body 
sent_date 

Table message_threads 
===================== 
id 
message_id 
owner_id 
member_id 
owner_read 
member_read 

В таблице message_threads, «владелец» относится к пользователю, который начал нить, и «член» относится к другому участнику. Входящие пользователя будут содержать потоки, которые они создали сами (владелец), а также потоки, созданные другими пользователями, на которые они ответили (члену).

Логика для установки статуса чтения выглядит следующим образом:

  • если владелец отправляет ответ: поле «member_read» устанавливается равным 0 (непрочитанные), «owner_read» поле устанавливается равным 1 (чтение)

  • если член посылает ответ: «owner_read» поле установлено значение 0 (непрочитанных), поле «member_read» устанавливается равным 1 (чтение)

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

Любые предложения о том, как я должен это делать?

EDIT: Вот exaple сценарий:

  • Пользователь 1 посылает нитяным Пользователю 2
    • Поток А появляется в Пользовательский 2 в почтовом ящике (статус 0: непрочитанные)

  • Пользователь 2 открывает Thread A
    • Thread Статус, устанавливается в 1 (чтение)

  • пользователя 2 ответов в теме A
    • Thread статус в пользователя 1 в почтовом ящике (статус 0: непрочитанные)
    • Тема «А» в папке «Входящие» пользователя 2 (статус 1: прочитано)

  • Пользователь 1 открывает Поток A
    • Нитки статус устанавливается в 1 (чтение)

  • пользователя 1 ответов в теме A
    • Thread статус в пользователя 1 в почтовом ящике (состояние 1: чтение)
    • Тема статуса в Пользовательский 2 в почтовом ящике (статус 0: непрочитанные)
+0

так ... нить только читается двумя людьми? – Matt

+0

Да, это так. Это разговор 1-1. – GSTAR

ответ

0

только «читать» статус сообщений, не происходило от вас. ответ получателю отмечен как прочитанный при открытии. Отправитель не волнует, если оно было прочитано, если вы не хотите «подтверждение получения»

Так - с этим в виду то, что я думаю, что это должно выглядеть так (я не включают в себя все поля в сообщениях):

Таблица "пользователи"

id 
name 

стол "сообщения"

id (int) 
parent_id (int) 
from_user_id (id) 
to_user_id 
read (bit/bool) 
message (text) 

Позвольте мне знать, если я не правильно вас понял.

+0

Вижу. Таким образом, ваш подход состоит в том, чтобы иметь статус чтения в фактическом сообщении, а не в потоке. Но поскольку почтовый ящик пользователя будет отображать потоки, а не отдельные сообщения, будет ли это работать? – GSTAR

+0

Похоже, вы могли бы использовать представление в дополнение к только таблицам – Matt

+0

Предполагая, что parent_id равен 0 (верхний разговор), вы могли бы иметь другую таблицу, в которой вы отслеживаете потоки через message_id, user_id, is_read. Эта таблица должна содержать только идентификатор сообщения, которое запустило поток. присоединитесь к этой таблице при показе сообщений, и теперь вы можете показать/скрыть в зависимости от их статуса чтения. – IEnumerator

Смежные вопросы