Уведомление о частном обмене сообщениями - PullRequest
2 голосов
/ 07 января 2012

Я создал систему личных сообщений, использующую PHP и MySQL, с уведомлением, немного похожим на Facebook.

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

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 07 января 2012

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

0 голосов
/ 07 января 2012

Мне я положу удаленный столбец один раз и то же самое для чтения или не чтения вроде:

[{"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";

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

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

  • TreadID (FK_message_Table)
  • удалить (0 = оба удаленных ИД пользователя = не показывать ни этому отправителю, ни получателю)
  • notify (0 = оба читают UserID = читают этому отправителю или получателю)

Тогда нужно изменить статус или оператор удаления.

SELECT будет выглядеть примерно так:

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

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

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

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

0 голосов
/ 07 января 2012

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

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL;

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

Таким образом, вы можете использовать столбец состояния в каждом ответе.

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

Надеюсь, это поможет

...