![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Рыжий |
|
||||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Всем привет!
Есть такой вопрос: Необходимо сделать групповую систему общения. Так что-бы пользователь мог отправить одно PM многим людям одновременно. Вопрос - как лучше хранить ID участников общения? Наилучший способ который вижу я - это сделать поле: participants - участники дискуссии В котором размещать данные:
Когда пользователь ID=370 достает свои сообщения, делать:
Но возможно есть более быстрые способы это сделать? Спасибо! |
||||
|
|||||
Artemon |
|
|||
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Users
--------- idUser Login Discussion ---------- idDiscussion NameDiscussion UsersInDiscussion ---------- id idUser idDiscussion Messages --------- idMessage idUser Message Это сообщение отредактировал(а) Artemon - 8.6.2011, 13:21 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Рыжий, группа - динамически формируемая, или хранится постоянно по типу списка рассылки? Следует ли учитывать возможность нахождения абонента в оффлайне и хранить сообщение до его появления?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Рыжий |
|
|||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Artemon, Да, хороший вариант.
Тогда для обсуждений необходимо даже 3 таблицы: Discussion ---------- idDiscussion UsersInDiscussion ---------- id idUser idDiscussion Messages ---------- id idAuthor idDiscussion textMessage Хех, Таблица Discussion выглядит так одиноко с одним параметром id (А больше в ней ничего особого хранить не надо). Но оставим ее все равно нет более подходящего места для idDiscussion Akina, Это обыкновенная система Private Messages как на форуме, только в поле To можно указать много пользователей. Когда кто-то из участников отвечает - он отвечает всем сразу. Будет возможность удалить себя из группы
Да Это сообщение отредактировал(а) Рыжий - 8.6.2011, 13:37 |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
В таком случае вышеописанная структура не подходит. Следует ввести таблицу, которая связывает пользователей с сообщениями, которые следует им доставить (idUser-idMessage). Это будет самая нагруженная таблица - в неё добавляются записи при написании сообщения (по количеству адресатов группы минус автор) и удаляются после пересылки. И чтобы немного разгрузить её - добавь туда поле-пометку о доставке, и по значению этого поля (а также по истечении времени жизни сообщения или при удалении абонента из группы) выполняй периодическую очистку (или снос в архив). Это намного лучше, чем удалять по одной записи сразу после доставки. Это сообщение отредактировал(а) Akina - 8.6.2011, 14:10 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Рыжий |
|
||||||||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Akina, Мне кажется ты воспринял фразу "групповая система общения" слишком буквально. На деле же получится система скорее похожая на email чем на чат.
Я правильно понимаю, что ты за систему типа: Messages ---------- id idAuthor textMessage Recipients ---------- id idUser idMessage Где Messages будет содержать сообщение. А Recipients - значения idUser и ссылаться на messages.id? А после того как человек прочел сообщение - удалять его из таблицы Recipients? Но ведь это как бы гемор? ![]() С тремя таблицами не лучше не хуже, но я понял так: В таблице Discussion
(last_update - время последнего сообщения в этой дискуссии, сделано для удобства сортировки) В таблице Messages:
Связь по discussion.id = messages.discussion_id И в таблице Participants:
Все участники дискуссии с №2 Связь с discussion.id = participants.discussion_id Автоматически удалять сообщения после их прочтения нет необходимости т.к. у юзера все будет идти и оставаться в inbox. Захочет удалить свои сообщения - пожалуйста. Захочет выйти из дискуссии - просто удалим его из таблицы participants с соответствующим ID дискуссии. Хотя, возможно, я тебя в корне неправильно понял? ( |
||||||||
|
|||||||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
да ?? чем? Есть масса возражений - но тебе виднее... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Рыжий |
|
||||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Akina, Да, ты оказался прав, третья "над"таблица связывающая Messages и Participants там ни к чему.
Параметр discussion_id хорошо себя чувствует в messages таблице. Из неудобств: для того, что бы выбрать например 10 последних дискуссий в которых участвует пользователь запрос будет:
В мануале mysql:
И при Explain - есть параметр "Using temporary". В остальном же все замечательно! Большое спасибо Akina, Artemon!!! |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |