如何为用户喜欢的主题设置表格?我有一个主题表和一个用户表(实际上更简单,但在这里的帖子简化)。由于用户生成的主题越来越多,我怎样才能让用户喜欢页面?我会将主题的id放在用户表中,还是将主题表中的用户ID或创建新的喜欢表?我看到的问题是主题的数量可能(可能)非常大。我可以用什么来创建一个允许用户ID和主题id之间关系的系统?
答案 0 :(得分:3)
你可能做的是“多对多”表结构
UINT (10) AUTO_INCREMENT
UINT (10)
(或与您的主user_id
字段匹配的内容)UINT (10)
(或与您的主topic_id
字段匹配的字段) user_id
和topic_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 &的主题表主题 喜欢表中的外键 ..
拥有这样的结构会很好,以后如果你甚至不想要一个喜欢的功能,可以删除它而不影响其他表......