我想让用户互相发送消息, 目前这是当前架构
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_to'类型从整数(只有一个ID)更改为varchar,以便:
id_usuario - 用户(reciver)分隔的多个唯一ID逗号
并存储多个reciver,如(多个ID):'333,444,555'
我能够:
仍在查明查询,它会是这样的:
"select * from inbox where sesionid IN (idto)"
??
"select id_to from inbox where id = '254'"
然后由','?? 或者,
我应该改变我的方案吗?
答案 0 :(得分:3)
您可以通过创建另一个存储收件人的表来更好地完成此操作,其中每一行都列出了邮件ID和收件人ID。同一消息ID的多行代表同一消息的多个收件人。
使用这种结构,您可以使用JOIN
语句对收件人运行查询。
答案 1 :(得分:2)
由于不需要知道项目的大小,因此通常不鼓励在一列中存储多个ID,因为每个ID都需要处理能力。
我建议创建一个名为“MessageReceivers”的表或类似的东西。它将包含messageID和接收消息的人的userID。您将为每个收件人创建一行。
然后使用索引,您可以通过简单的连接快速获取该用户的所有消息。