2011-04-14 123 views
2

我希望讓用戶相互發送消息, 現在這是當前模式的消息(數據庫字段)多recivers

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(發送者)
  • id_to - 唯一ID從用戶(reciver)
  • ID - 唯一的消息ID

我想知道,

如果我改變從整數(只有一個ID)爲varchar, 'id_to' 類型以

  • id_usuario - 多個唯一ID的逗號分開用戶(recivers)

    和存儲多個recivers等(多個ID的):333 '444,555'

我可以:

  • 顯示每個reciver的消息?

還在搞清楚查詢,會不會是這樣的: "select * from inbox where sesionid IN (idto)" ??

  • show sender each message for message? 仍然搞清楚查詢,它會像"select id_to from inbox where id = '254'" 然後按','爆炸?

或者,

我應該改變我的計劃?

感謝

回答

2

由於不知道項目大小,通常不鼓勵在一列中存儲多個ID,因爲每個ID都需要進行過濾。

我會建議創建一個名爲「MessageReceivers」或類似的表。它將包含接收消息的人員的messageID和用戶ID。您將爲每個收件人創建一行。

然後通過索引,您可以通過簡單連接快速獲取該用戶的所有消息。

+0

這樣,我可以從'收件箱'中排除id_usuarios和id_to並創建inbox_map(id,id_from,id_to,msgid),或者如何?謝謝! – 2011-04-14 04:26:11

3

你可以通過創建另一個表來存儲收件人,每行列出的消息ID和接收者ID這更好的。同一個消息ID的多行代表同一消息的多個收件人。

使用這種結構,您可以使用JOIN語句對收件人運行查詢。