处理用户的读/未读帖子,如mysql中的邮件

时间:2011-07-05 12:19:50

标签: mysql bit-manipulation read-unread

我需要处理每个用户的帖子的已读/未读状态。 现在写我正在使用非规范化列来存储逗号分隔的user_ids。由于它是文本列,因此选择查询的性能会降低。

现在我想为所有用户说明一个常量 用户A-1,用户B-2,用户C-4和用户D-8(按位),并将其组合存储在整数列中。因此当用户A,C读取整数列的值时(1) +4)5。 并使用条件中的按位运算符来查询已读/未读的帖子。问题是没有。我可以作为组合存储的用户被限制在一列中说62用户的状态。如果我必须进一步扩展,我可能会添加另一个BIGINT列来存储其他用户。

什么是存储该信息的最佳方式。 以下是我需要采取的行动。

  1. 当发布新回复时,我必须将值更新为0(为每个回复更新)。
  2. 当用户阅读帖子时,更新列中的状态。
  3. 选择用户的所有未读帖子。
  4. 编辑: 我试图间接解决第三个问题。我在选择列列表中添加该整数列,并在应用程序代码中查找用户的读取状态,而不是添加为mysql条件。任何方式这都不是解决方案。我仍然需要一个好的。

1 个答案:

答案 0 :(得分:0)

我会这样做,创建一个这样的表:

CREATE TABLE views(
    user_id bigint not null,
    post_id bigint not null,
    primary key(user_id,post_id
)

然后只检查是否存在具有用户ID和帖子ID的记录。您也可以使用它来计算视图数量。