2013-03-10 61 views
-1

我将用户标识值存储在由| (user_id1 | user_id2 | user_id3 | user_id17)。检查CSV中的值MySQL的行

用户ID将在某些点添加并从此字段中删除。

如何检查当前用户ID是否存在于该字段中或者未使用查询? 而它当然需要精确匹配。找不到user_id1并找到user_id17

我知道我可以使用SELECT查询,爆炸该字段,然后使用in_array,但如果有一种方法可以使用查询,它会更好。

我想我会解释我在做什么:我为一个小型私人网站(7个用户)做了一个论坛,但是为了更大规模的编码。

我的表格结构很不错:forum_categories,forum_topics,forum_posts。在表之间使用外键来删除和更新查询。

我在寻求的帮助是标记为每个用户未读的主题。我可以用topic_id & user_id创建一个新表格,每个表格都是一个新行,但对于很多用户而言这并不会很好。

如果有人有更好的解决方案,我就是为了它。或者可以向我证明,每user_id是1行是最好的方式,那么我会更愿意这样做。

+0

我会建议看SMF(http://simplemachines.org)或任何其他开源PHP论坛软件,看看他们是如何做到这一点。 – AndrewR 2013-03-10 18:06:56

+0

http://cheackoverflow.com/questions/15325111/check-for-value-in-mysql-row – 2013-03-10 18:12:35

+3

的重复人们什么时候才会知道规范化数据库会让他们的生活变得如此简单 – 2013-03-10 18:15:34

回答

1

我想你想跟踪阅读消息,而不是其他方式。如果您跟踪未读邮件,则每次添加用户时都必须将该用户添加到每个主题“未读列表”中。

我看着SMF就像我的评论建议。他们正在使用一个单独的表来跟踪读取消息。

一个简单的表,包含user_idtopic_id是你需要的。当用户阅读某个主题时,请确保该用户的表中有一行。

使用单独表格的另一个原因。查询数据库中的2个int值要比使用LIKE %语句更快。

+0

好的。我真的认为CSV会更快地查询。谢谢!编辑:我正在跟踪读取消息。 – Draven 2013-03-10 18:24:00

+0

当用户阅读主题时,用最新帖子更新'post_id'是否更好?当他们查看主题列表时比较'post_id'?或者在他们阅读主题时向表中插入一行,那么当有新帖子时,删除forum_is_read表中该主题的所有行? – Draven 2013-03-10 18:37:26

+0

我想到了更多,我认为你应该跟踪'user_id'和'topic_id'。然后做第二件事,如果添加了新帖子,删除topic_id的'forum_is_read'中的所有行。 – AndrewR 2013-03-10 18:42:01