我正在研究CMS类型的结构。我已经到了这样的地步:除了一些我一直在思考的小事情,比如这个,几乎所有的事情都到位了。
假设有一个用户表和一个文章表。当然,如果有人"喜欢"一篇文章,用户的ID将存储在文章表的一列中。像这样的11241,12412,12312
。(这些是随机的用户id)
现在让我们假设有一个用户的个人资料页面,我想遍历用户的喜欢的帖子,并在那里显示它。
现在,我想到了两种方法来做这件事。
第一个方法是用户喜欢的文章id存储在用户表的行中,我们从中获得它,但是这似乎有点低效。因为如果用户已经点赞了很多文章,那么我的数据库的列是否会用完空间?
第二个方法将遍历每篇文章并查看用户ID是否存在于该文章保存的喜欢者列表中。然而,在我看来,这种方法真的很慢,而且是一种非常糟糕的做法。
那么这个的最佳实践是什么呢?
创建一个有两列的表:user_id
和article_id
。当用户"喜欢"一篇文章时,在该表中插入一行。然后,当您想要查看用户#123喜欢了哪些文章时,您可以发出这样的查询:
SELECT `article_id` FROM `article_user` WHERE `user_id` = '123';
如果需要文章数据,只需连接article_id
列即可:
SELECT `article`.*
FROM `article`
LEFT JOIN `article_user` ON `article`.`id` = `article_user`.`article_id`
WHERE `article_user`.`user_id` = '123';