我正在处理某种类型的私人对话网站,我正在将对话存储在桌面上(消息存储在另一个桌面上)
这是格式:
我的问题是,我存储成员的方式确实非常糟糕。我正在使用user1Id;user2Id;user3Id
。
尝试获取特定播放器的所有对话时,会出现问题。
我的问题是:有没有更好的存储ID的方法? (如果可能,在一个字段上)并且还能够选择特定ID的所有会话?
答案 0 :(得分:2)
为什么不让会员加入对话桌?在那里你可以存储像这样的成员和对话
member_id | conversation_id
1 | 1
2 | 1
3 | 1
1 | 2
2 | 2
意思是成员1,2和3是对话1的一部分,成员1和2是对话2
这就是我如何做这样的事情以及它的工作方式。
如果你仍然希望将它们存储在一个字段中,那么你的方式将是最好的,因为你可以通过它们的分隔符拆分它们并以这种方式将所有id放在一个数组中。但正如您所指出的那样,使用此方法通过用户ID进行对话变得非常混乱。
答案 1 :(得分:2)
“正确”,规范化的数据库方式是使另一个表member_conversation_map
具有两列 - 成员ID和会话ID,并使用例如in
运算符进行查询:
SELECT *
FROM conversations
WHERE id IN (SELECT conversation_id
FROM member_conversation_map
WHERE member_id = 123)
如果这不是一个选项,并且您必须在数据库中的单个单元格中拥有成员ID,至少使用逗号而不是分号作为分隔符。这将允许您使用MySQL的find_in_set
:
SELECT *
FROM conversations
WHERE FIND_IN_SET('123', members) > 0
答案 2 :(得分:0)
存储的一种方法是使用json数组:将member_ids定义为VARCHAR并存储特权ID,如:
["11","1","2","3"]
使用json_decode,您可以在需要时获取成员。