Несколько получателей для сообщений (поле базы данных) - PullRequest
2 голосов
/ 14 апреля 2011

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

CREATE TABLE IF NOT EXISTS `inbox` (
  `id` int(11) NOT NULL auto_increment,
  `id_usuario` int(11) NOT NULL,
  `id_to` int(11) NOT NULL,
  `mensaje` varchar(250) collate utf8_spanish_ci NOT NULL,
  `texto` text collate utf8_spanish_ci NOT NULL,
  `fecha` date NOT NULL,
  `visto` int(1) NOT NULL,
  `adjunto` int(1) NOT NULL,
  `item` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

. По этому вопросу, я думаю, что это актуально только:

  • id_usuario -уникальный идентификатор пользователя (отправителя)
  • id_to - уникальный идентификатор пользователя (получателя)
  • id - уникальный идентификатор сообщения

Мне интересно,

если я изменю тип id_to с целого числа (только один идентификатор) на varchar, чтобы:

  • id_usuario - запятая нескольких уникальных идентификаторов, отделенная от пользователей (получателей)

    и хранить несколько приемников, таких как (несколько идентификаторов): '333, 444, 555'

смогу ли я:

  • показать каждому получателю сообщение?

Все еще вычисляя запрос, это будет что-то вроде: "select * from inbox where sesionid IN (idto)" ??

  • показать отправителю каждого получателя сообщения?Все еще вычисляя запрос, будет ли это что-то вроде "select id_to from inbox where id = '254'", а затем взорвется ',' ??

Или

Должен ли я изменить свою схему?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

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

С такой структурой вы можете выполнять запросы с получателями, используя операторы JOIN.

2 голосов
/ 14 апреля 2011

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

Я бы предложил создать таблицу под названием MessageReceivers или что-то в этом роде. Он будет содержать messageID и userID для лица, получающего сообщение. Вы должны создать одну строку для каждого получателя.

Затем с помощью индексов вы можете быстро получить все сообщения для этого пользователя с помощью простого объединения.

...