2

У меня есть личная система обмена сообщениями с использованием PHP и mySQL с уведомлением, похожим на Facebook.Частное уведомление о сообщениях - дизайн таблицы базы данных

В таблице базы данных имеет следующие поля (не все перечисленные):

  • MessageID
  • senderUserID
  • RecUserID
  • Сообщение
  • Тема
  • DateTime
  • Статус - будь то чтение или нет
  • RepliedStatus - как я должен использовать это?
  • DeleteRec - удалить из почтового ящика
  • DelSender - удалить отправителя почтовый ящик
  • RepliedUserId - Когда пользователь ответ на первоначально сообщении это изменение идентификатора получателя

Все ответы сохраняются во второй таблице, так как каждый сообщение создать поток. Вторая таблица выглядит как это:

  • MESSAGEID - FK
  • repuserID
  • электронном письме
  • DateTime

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

Но если пользователи ответят на это сообщение, я не могу установить исходное поле «статус» для непрочитанных, так как это будет отображаться в уведомлении обоих пользователей. поэтому я создал другое поле под названием «RepliedStatus», но я не уверен, как использовать это, чтобы показать уведомление о ответе на сообщение?

спасибо, ребята.

ответ

2

Если у вас есть таблица ответов, вам не нужен столбец состояния ответа на ваш первый статус. В силу наличия записи в таблице ответов вы знаете, что пользователь ответил на сообщение

+0

aah одна проблема, имеющая статус в таблицах ответов, как пользователи (отправитель/получатель) получат уведомление, так как ответы действуют как поток на основное сообщение, немного похожее на книгу лиц. Например: пользователь. Отправляйте сообщение пользователю B, пользователь B отвечает на это сообщение, а пользователь A отвечает на одно и то же сообщение и т. д. все это в одном сообщении. – TheDeveloper

0

Почему вы не добавляете столбец INT и nullable в первую таблицу (скажем, таблицу «сообщения») с именем «previous_message» «?

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL; 

Таким образом, каждое сообщение будет иметь в одной и той же таблице предыдущий, и вы можете выработать последовательность. Если это поможет, вы можете иметь столбец «next_message» с тем же определением и обновить соответствующую запись в ответ.

Для этого вы можете использовать столбец статуса для каждого ответа.

Если вы хотите сохранить одну и ту же организацию БД, я бы предложил добавить статус столбца во вторую таблицу (скажем, «ответы»).

Надеется, что это помогает

0

Me Я положу удален столбец разы и те же вещи для чтения или не читать, как:

[{"0":"both", "1":"Sender", "2":"receiver"}]; 

А затем извлечение протекторных сообщений как:

$sql = "SELECT * FROM messagetreads 
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
AND deleted !== 0 
ORDER by TreadID AND DateTime ASC"; 

Когда отправитель «удаляет» протектора ... Все идентификаторы протектора в базе данных меняются на 1 или 0, если удаление colomn равно 2 ...

Но я думаю, что лучше создающее другое колонным для получения повторные удалена и уведомления данных, такие как

  • TreadID (FK_message_Table)
  • удалить (0 = оба удаленный Идентификатор_пользователь = не появляется в этом отправитель или приемник)
  • уведомят (0 = и прочитать Идентификатор_пользователь = читать этот отправитель или получатель)

Тогда это Ezee изменить статус или ВЕЯТ.

Оператор SELECT будет sometings, как это:

$SQL = "SELECT * 
FROM messagetreads 
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
IN (SELECT TreadID WHERE delete !== (0 OR ".$_SESSION['MyCurrentId']."))"; 

Если наш член идентификатор включает в колонном удалить все протектор не появляется, но если это идентификатор приемника, когда отправитель удалит 0 могут быть отнесены так, чтобы оба участника могли «удалить» сообщение. То же самое для уведомлений!

очень далеко позже в cron'е может прийти удалить очень-старое сообщение читать (0) ...

PS: это может быть система оповещения тоже, как уведомление для нового поста в стене или прокомментировать фотографии или новые события в календаре ... просто добавьте дополнительную информацию в данные столбца и создайте ее с помощью php или java-ajaxed ...

+0

[queue]: http: //phpmaster.com/zend-queue/ И я нашел интересным для способа уведомления, чтобы найти его, чтобы сохранить отметку времени сообщения и посещения члена в message_tread и сравнить его в параллельном как zend-queue doe ([zend-queue on PHP-MASTER]] [queue] http://phpmaster.com/zend-queue/). Также я отделяю участников от протектора в другой таблице, потому что я просто хочу иметь возможность добавлять участников к протекту сообщения (точно так же, как Facebook ...), и все строки содержат последнюю посещенную временную метку, user_id, message_Tread_id –

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