鍍金池/ 問(wèn)答/HTML5  數(shù)據(jù)庫(kù)/ mysql收藏功能開發(fā)

mysql收藏功能開發(fā)

clipboard.png

clipboard.png
我現(xiàn)在有這兩個(gè)表 一個(gè)用戶 一個(gè)存儲(chǔ)文章

現(xiàn)在想開發(fā)收藏文章功能,一個(gè)用戶可以收藏多篇文章,但是不用考慮每篇文章都是被誰(shuí)收藏的,能知道每篇文章的收藏?cái)?shù)量就行。 請(qǐng)問(wèn) 應(yīng)該如何建表? 本人新手 能給個(gè)像我這樣的表格更好 謝謝

網(wǎng)上查了 說(shuō)不推薦這樣做是嗎 ?在user表里加一個(gè)字段 存儲(chǔ)收藏文章的id用,號(hào)隔開 這樣做有什么不好嗎(下圖)

clipboard.png

還有一種是建一個(gè)收藏表 這樣做對(duì)嗎? 應(yīng)該怎么設(shè)置主鍵呢?應(yīng)該怎關(guān)聯(lián)表呢?(本人新手 不懂主鍵和關(guān)聯(lián))
假如在用戶頁(yè)面 想查看收藏文章的列表,查詢語(yǔ)句應(yīng)該怎么寫呢?比如想查找用戶2的收藏文章的列表信息
根據(jù)user_id = 2 想得到[{article_id:10,title:"文章1"},{article_id:11,title:"文章2"}]查詢語(yǔ)句應(yīng)該怎么寫呢?

clipboard.png

回答
編輯回答
青裙

1.這個(gè)就應(yīng)該冗余了,你目前沒(méi)更多需求,但是要考慮到將來(lái)可能潛在的需求。
id,user_id,article_id
什么是可能是潛在的需求呢
2.舉個(gè)例子,比如說(shuō)你們做了社交圈子,比較常見的設(shè)計(jì)就是找出和你有共同興趣愛好的人,那么你如何去找,是不是得分析數(shù)據(jù),那么共同收藏是不是可以作為一個(gè)點(diǎn)。而且SQL只要這么寫SELEC * from shoucang where article_id= {你收藏文章的ID} limit 10,可以走索引,不會(huì)造成性能開銷
3.數(shù)據(jù)庫(kù)設(shè)計(jì)中,涉及到 1:N , N:N 。無(wú)論前期需求如何,一定要設(shè)計(jì)一張中間表。

2018年9月20日 08:12
編輯回答
筱饞貓

個(gè)人覺(jué)得用逗號(hào)隔開的就不方便后期做一些其他處理了,例如反過(guò)來(lái)要查詢多少個(gè)用戶收藏了同一篇文章

2017年11月7日 22:54
編輯回答
懶豬

你需要了解join操作
至于主鍵,你可以用user_id和article_id一起作為復(fù)合主鍵,最簡(jiǎn)單的作法如下(假定你的用戶id和文章id不變。。當(dāng)然一般是不變的)...

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把收藏表和文章表連接起來(lái),on后面是條件。這里指定收藏表中用戶id為2,且收藏表的文章id和文章表id對(duì)應(yīng)。

有疑惑歡迎在評(píng)論里提出...

其他:

語(yǔ)句可以優(yōu)化下,因?yàn)閖oin操作其實(shí)是兩張表的叉乘,會(huì)將m條數(shù)據(jù)的收藏表和n條數(shù)據(jù)的文章表合成一個(gè)m*n的大表。因此可以選中收藏表中用戶id為2的作為子表,假設(shè)有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

當(dāng)然可以建立表的索引來(lái)進(jìn)一步優(yōu)化,這些以后再研究先了解mysql的常用操作吧

2017年4月26日 17:45
編輯回答
遲月

如果用數(shù)組存儲(chǔ)的話吶,一個(gè)用戶對(duì)應(yīng)有一個(gè)數(shù)組,里面存放文章的唯一id值,查看的話就查詢這個(gè)用戶下的數(shù)組的所有值

2018年2月11日 11:23