【发布时间】:2014-09-04 18:33:29
【问题描述】:
我在一个消息系统上工作。在此消息系统中,管理员可以向单个用户、用户组或所有用户发送消息,并且用户只能看到消息。
知道我想在用户面板中查找未读消息。
我设计了两个这样的数据库表:
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 php函数或in_array函数检查用户ID。
方法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_msg 和message_id,因为它比is_array (reference) 快。
【问题讨论】:
-
两者都可以,随着表变大,性能会更高,但不要在 php 中使用
strpos或in_array,如果您使用的是集合,您可能希望使用 MySQLsNOT FIND_IN_SET(1, readers)查找未读消息。
标签: php mysql database message