0

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

4

4 回答 4

3

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

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

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

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

SELECT * FROM user_likes` WHERE `user_id`=USER_ID

让用户喜欢看起来像这样 -

SELECT * FROM user_likes WHEREtopic_id`=TOPIC_ID


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

不要忘记在用户 ID 上添加索引以支持检索用户喜欢的主题,并且主题上的单独索引用于支持每个用户查询的主题 -没有这些,随着时间的推移添加更多数据,查询将变得更慢。

于 2012-07-28T20:56:44.763 回答
0

一种方法是创建一个新表UserLikedTopics或类似的东西,其中有两列,一列保留 ,一列UserId保留TopicId. 对于用户“喜欢”的每个新主题,您将使用 UserId 和 TopicId 在表中添加一个新行。这样就很容易跟踪哪些用户喜欢哪些主题。

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

于 2012-07-28T20:56:59.810 回答
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`)
) 
于 2012-07-28T20:57:55.497 回答
0

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

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

于 2012-07-28T21:02:27.890 回答