mysql收藏功能开发

clipboard.png

clipboard.png
我现在有这两个表 一个用户 一个存储文章

现在想开发收藏文章功能,一个用户可以收藏多篇文章,但是不用考虑每篇文章都是被谁收藏的,能知道每篇文章的收藏数量就行。 请问 应该如何建表? 本人新手 能给个像我这样的表格更好 谢谢

网上查了 说不推荐这样做是吗 ?在user表里加一个字段 存储收藏文章的id用,号隔开 这样做有什么不好吗(下图)

clipboard.png

还有一种是建一个收藏表 这样做对吗? 应该怎么设置主键呢?应该怎关联表呢?(本人新手 不懂主键和关联)
假如在用户页面 想查看收藏文章的列表,查询语句应该怎么写呢?比如想查找用户2的收藏文章的列表信息
根据user_id = 2 想得到[{article_id:10,title:"文章1"},{article_id:11,title:"文章2"}]查询语句应该怎么写呢?

clipboard.png

阅读 6k
5 个回答

你需要了解join操作
至于主键,你可以用user_id和article_id一起作为复合主键,最简单的作法如下(假定你的用户id和文章id不变。。当然一般是不变的)...

create table shoucang_table
(  
   user_id int(11),
   article_id int(11), 
   create_at datetime,
   primary key (user_id ,article_id ) 
) 

这样要知道用户2的收藏列表,可以
`select article_table.id,article_table.title,article_table.author from
article_table inner join shoucang_table
on shoucang_table.user_id=2 and shoucang_table.article_id=article_table.id`
join把收藏表和文章表连接起来,on后面是条件。这里指定收藏表中用户id为2,且收藏表的文章id和文章表id对应。

有疑惑欢迎在评论里提出...

其他:

语句可以优化下,因为join操作其实是两张表的叉乘,会将m条数据的收藏表和n条数据的文章表合成一个m*n的大表。因此可以选中收藏表中用户id为2的作为子表,假设有k条(k<<m),合成的表就是k*n条记录。

select article_table.id,article_table.title,article_table.author from article_table
 inner join 
(select * from shoucang_table where user_id=2) as shoucang
 on  shoucang.article_id=article_table.id

当然可以建立表的索引来进一步优化,这些以后再研究先了解mysql的常用操作吧

个人觉得用逗号隔开的就不方便后期做一些其他处理了,例如反过来要查询多少个用户收藏了同一篇文章

新手上路,请多包涵

如果用数组存储的话呐,一个用户对应有一个数组,里面存放文章的唯一id值,查看的话就查询这个用户下的数组的所有值

1.这个就应该冗余了,你目前没更多需求,但是要考虑到将来可能潜在的需求。
id,user_id,article_id
什么是可能是潜在的需求呢
2.举个例子,比如说你们做了社交圈子,比较常见的设计就是找出和你有共同兴趣爱好的人,那么你如何去找,是不是得分析数据,那么共同收藏是不是可以作为一个点。而且SQL只要这么写SELEC * from shoucang where article_id= {你收藏文章的ID} limit 10,可以走索引,不会造成性能开销
3.数据库设计中,涉及到 1:N , N:N 。无论前期需求如何,一定要设计一张中间表。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题