2011-01-20 6 views
2

В настоящее время я разрабатываю систему обмена сообщениями пользователей (аналогичную Facebook) для моего существующего сайта. У меня уже есть таблица пользователей, и мне просто нужно интегрировать систему обмена сообщениями.Система обмена сообщениями пользователей (PHP/MySQL)

Я начал рассказ об этом вчера (User messaging system) и сделал некоторый прогресс, но структура изменилась совсем немного, поэтому я начинаю новый вопрос.

Что я хочу знать, в чем, собственно, должна выглядеть структура таблицы? Требования заключаются в следующем:

  • Обмен сообщениями осуществляется между пользователями, и отправитель может отправить сообщение нескольким получателям.

  • Сообщения отображаются в макете в стиле нити, как разговор 1-1. то есть ответ каждого получателя появится в его собственном потоке.

  • После создания потока он появится в папке отправленных отправленных сообщений - он не появится в их папке «Входящие», если получатель не отправит ответ.

  • Отдельные сообщения не могут быть удалены, однако поток можно удалить. Удаление потока не удаляет никаких сообщений, оно просто удаляет этот поток из папки входящих сообщений пользователя (или папки «отправленных сообщений»). У другого пользователя все равно будет доступ к потоку, если он/она не удалил его из папки входящих сообщений (или «отправленных сообщений»).

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

Вот что у меня есть на данный момент:

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

Table message_threads 
===================== 
id 
message_id 
to_user_id 
from_user_id 
read_status 

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

Любое руководство будет высоко оценено.

+2

несколько сообщений будут лучше, проще управлять ими. – Edmhs

ответ

2

Я согласен с @Eddsstudio: когда пользователь отправляет сообщение, поместите его копию в «отправленную папку» и скопируйте в папку «Входящие» получателей. Для любых ответов: создайте новое сообщение в папке входящих первичных отправителей, не связанную с предыдущими сообщениями (т. Е. Нет ссылки на сообщение в отправляемой папке).

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

0
$query = 'CREATE TABLE IF NOT EXISTS ' . $db->prefix . 'pm (
    `post_id` => $post->ID, 
    `role_id` => $role_id, 
    `sender` varchar(60) NOT NULL, 
    `recipient` varchar(60) NOT NULL, 
    `date` datetime NOT NULL, 
    `read` tinyint(1) NOT NULL, 
    `deleted` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) COLLATE utf8_general_ci;'; 

Я считаю, что что-то структурированное в этом характере будет работать.

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