gpt4 book ai didi

php - 将数组保存在数据库的一个字段中还是将每个值保存在单独的字段中?

转载 作者:行者123 更新时间:2023-11-29 12:44:16 26 4
gpt4 key购买 nike

我从事消息系统工作。在此消息中,系统管理员可以向单个用户、用户组或所有用户发送消息,并且用户只能看到消息。知道我想在用户面板中查找未读消息。我设计了两个这样的数据库表:
1-msg_messages:
| id | title | messages | date | status |

2- msg_control :
| id | message_id | from | toUser | toGroup | status |

知道我想到了这两种保存看到消息的用户的方法。
方法 1:创建一个带有读者 ID 的字符串,如下所示:1,5,9,12,...并通过 Strpos 使用此字符串检查用户 ID php 函数或 in_array功能。

方法 2:创建一个如下表所示的新表并将读者 ID 保存在其中:
| id | message_id | readers_id | date |

这两种方法哪一种更好?

<小时/>

查找未读消息的新方法...

在对这个问题进行了更多思考之后,我决定结合方法1和方法2来使用一种新方法。实际上我在user中添加了一个新列。表并将其命名为read_msg 。系统将保存读取message_id在这个归档中像这样的字符串 1,5,9,12,98,125,...对于每个用户(message_id在本文件中引用msg_control表),当我们想要查找未读消息时只需要比较msg_control与此归档的 ID。
我们使用strpos比较read_msgmessage_id因为它比 is_array 快(reference)。

最佳答案

我曾经实现过一个小型消息系统,其结构如下(但它可能并不完美,有多种可能性):

选项卡对话

ID | Conv Title | ... master data

参与者

UserId | ConversationID | lastRead

消息头

ConversationID | messageID | ... use your "inbox"-schema here. You can remove the toUser/toGroup etc. fields as this is covered using the participants table.

使用消息的时间戳和对话中用户的“上次阅读”时间戳,您可以确定哪些消息是新的/未读的,哪些不是。使用像您的第一个建议中那样的结构可能会变得非常低效。在我看来,存储数据原子被认为是很好的做法。这意味着单个字段中不能有多个值。

关于php - 将数组保存在数据库的一个字段中还是将每个值保存在单独的字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com