Как реализовать обмен сообщениями между пользователями

Аватара пользователя
Assasin
Сообщения: 104
Зарегистрирован: 17 фев 2011
Как реализовать обмен сообщениями между пользователями? Лучше использовать БД? Создать таблицу для каждого пользователя? У кого есть опыт помогите, или если вы использовали ЦМС поделитесь как там реализовано?

Аватара пользователя
Distructor
Администратор
Сообщения: 1604
Зарегистрирован: 28 дек 2009
если что-то типа личных сообщений (т.е. общение 1 на 1),
то понадобится собственно таблица пользователей (ид пользователя, имя пользователя, остальные поля по вкусу..)
и таблица сообщений (ид, дата, ид автора сообщения, ид адресата, текст сообщения)

если что-то типа простого чата,
то таблица сообщений будет проще (ид, дата, ид автора сообщения, текст сообщения)

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
Distructor писал(а):если что-то типа простого чата,
то таблица сообщений будет проще (ид, дата, ид автора сообщения, текст сообщения)

А я бы оставил поле ИД реципиента, можно было бы заюзать под приватные сообщения :)
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Assasin
Сообщения: 104
Зарегистрирован: 17 фев 2011
и таблица сообщений (ид, дата, ид автора сообщения, ид адресата, текст сообщения)

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

Аватара пользователя
SLITE
Сообщения: 203
Зарегистрирован: 01 янв 2010
а каким образом считать сообщения которые пользователь уже прочитал

создаешь дополнительное поле, где будет записываться прочтено ли сообщение или нет, а функцию можно реализовать так:
когда открываешь сообщение выполняется запрос и значение поля изменяется с 1 на 0, а потом подсчитываешь количество строк где значение =1 ( 1 т.е сообщение не прочитано) .

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
А с чего поиск по ИД должен быть долгим? Если поле индексируемое, то это самый быстрый способ получить данные из таблицы. Собственно для этого и вводят индексы.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Assasin
Сообщения: 104
Зарегистрирован: 17 фев 2011
Спасибо, я правильно понимаю что надо сделать следующее

USER
id user pass name family male
--------------------------------------------------------------
1 masha **** имя фамилия ж
2 vasya **** имя фамилия м
3 petya **** имя фамилия м
4 anya ***** имя фамилия ж
5 misha **** имя фамилия м
--------------------------------------------------------------

Маша отправила Мише сообщение привет
Вася отправил Ане как дела

MESSAGE
--------------------------------------------------------------
id to ot message data status
1 5 1 привет 1.1.11 0
2 4 2 как дела 1.1.11 0
--------------------------------------------------------------

теперь аня входит и в базе начинается поиск по полю to где ид = 4 ?

ПРАВИЛЬНО? ))

Аватара пользователя
SLITE
Сообщения: 203
Зарегистрирован: 01 янв 2010
только не ид = 4 а где to=4.

Аватара пользователя
Assasin
Сообщения: 104
Зарегистрирован: 17 фев 2011
спасибо..попробую

Аватара пользователя
AgentSIB
Администратор
Сообщения: 328
Зарегистрирован: 17 май 2010
Вообще это минимальный набор полей, можно еще добавить дату получения, дату прочтения, ну и прочее для удобства.
По поводу названия полей: to и ot - это называется быдлокодинг :) Используй английский :) to from. Либо serder_id и recipient_id - так еще корректней.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Аватара пользователя
Assasin
Сообщения: 104
Зарегистрирован: 17 фев 2011
Спасибо я всегда так и делаю. to ot это на скорую руку хотя что то в этом есть))))


Вернуться в «Вопросы по программированию»