我需要处理每个用户的帖子的已读/未读状态。现在写,我正在使用一个非规范化列来存储逗号分隔的user_ids。由于它是一个文本列,所以选择查询的性能会降低。
现在我想为所有用户指定一个常量用户A-1、用户B-2、用户C-4和用户D-8(按位(,并将其组合存储在整数列中。因此,当用户A、C读取整数列的值时,该值将为(1+4(5。并在条件中使用按位运算符来查询已读/未读帖子。问题是我可以存储的用户数量,因为组合受到限制,比如一列中62个用户的状态。如果我必须进一步扩展,我可能需要添加另一个BIGINT列来存储其他用户。
存储这些信息的最佳方式是什么。以下是我需要做的动作。
- 当发布新回复时,我必须将值更新为0(使每个回复都为未读(
- 当用户阅读文章时,更新列中的状态
- 选择用户的所有未读帖子
编辑:我试图间接地解决第三个行动。我在select columns列表中添加了integer列,并在应用程序代码中查找用户的读取状态,而不是作为mysql标准添加。无论如何,这都不是一个解决方案。我还需要一个好的。
我会这样做,创建一个这样的表:
CREATE TABLE views(
user_id bigint not null,
post_id bigint not null,
primary key(user_id,post_id
)
然后检查是否存在具有用户id和post id的记录。您也可以使用它来计算视图的数量。