用于保存用户喜欢的页面的MySQL表

时间:2012-07-28 20:54:36

标签: php mysql sql

如何为用户喜欢的主题设置表格?我有一个主题表和一个用户表(实际上更简单,但在这里的帖子简化)。由于用户生成的主题越来越多,我怎样才能让用户喜欢页面?我会将主题的id放在用户表中,还是将主题表中的用户ID或创建新的喜欢表?我看到的问题是主题的数量可能(可能)非常大。我可以用什么来创建一个允许用户ID和主题id之间关系的系统?

4 个答案:

答案 0 :(得分:3)

你可能做的是“多对多”表结构

  • 唯一的自动递增ID - UINT (10) AUTO_INCREMENT
  • 包含用户ID的字段 - UINT (10)(或与您的主user_id字段匹配的内容)
  • 包含“已赞”主题ID的字段 - UINT (10)(或与您的主topic_id字段匹配的字段)

user_idtopic_id字段都需要是唯一的。这意味着每个用户只能有一次特定行。这确保(在数据库方面)不允许用户多次喜欢某个主题。

获取用户喜欢的主题看起来像这样 -

SELECT * FROM user_likes` WHERE `user_id`=USER_ID

让每个用户看起来像这样 -

SELECT * FROM user_likes WHERE topic_id` = TOPIC_ID


正如其他人在他们的答案中所说的那样,以及@trevor在下面的评论中也是如此 -

  

不要忘记在userid上添加索引以支持检索用户喜欢的主题,并且主题上的单独索引是支持每个用户查询的主题 - 如果没有这些主题,查询会因为更多数据而变慢随着时间的推移而增加。

答案 1 :(得分:0)

一种方法是创建一个新表UserLikedTopics或类似的表,其中有两列,一列保留UserId,另一列保留TopicId。对于用户“喜欢”的每个新主题,您使用UserId和TopicId向表中添加新行。通过这种方式,可以轻松跟踪哪些用户喜欢哪些主题。

要获得特定用户喜欢的主题,您只需将UserLikedTopics与主题表一起加入,就可以获得某个用户喜欢的所有主题的列表。您也可以反过来将其加入到User表中,以获取喜欢某个主题的用户列表。

答案 2 :(得分:0)

你需要一个'喜欢'表。类似的东西:

CREATE TABLE `users_likes` (
    `user_id` INT(10) UNSIGNED NOT NULL,
    `topic_id` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`user_id`, `topic_id`),
    INDEX `topic_id` (`topic_id`)
) 

答案 3 :(得分:0)

创建一个单独的喜欢表,因为它是一个单独的实体,
表与用户&链接起来带有用户ID &的主题主题 喜欢表中的外键 ..

拥有这样的结构会很好,以后如果你甚至不想要一个喜欢的功能,可以删除它而不影响其他表......