簡體   English   中英

制作“標簽”系統的最佳方法

[英]Best Way to make a “hashtag” system

這可能是一個問題,因為我浪費了更多時間去思考如何正確地做,以最佳的最佳方式去思考。

我有一個表“ Contents”,並且需要添加選項以將多個“ hashtags”或“ tags”或“ keywords”與內容相關聯,例如,諸如“番茄醬炸土豆”之類的內容具有“ keys”: “土豆”,“番茄醬”和“油炸”。

當我用一個單詞(例如“ potato”)進行搜索時,我需要顯示其中包含標記該單詞的內容。

問題是,考慮到結果的速度,最好的結構是什么,因為內容表是MyISAM模式,行數超過30 Millon。

我認為是這樣的:

(id(INT11), content_id(INT11), hashtag_id(INT11)) 2個表“ contents_hashtags” (id(INT11), content_id(INT11), hashtag_id(INT11))和“ (id(INT11), hashtag(VARCHAR(40)))(id(INT11), hashtag(VARCHAR(40)))

當用戶創建/修改表內容時,我在hashtags表中搜索並獲取ID,如果不存在的hashtag,則在表hashtag中創建,如果存在,則獲取ID,使用此ID創建插入表content_hashtas中的關聯內容<-contents_hashtas-> hashtahs

在搜索中,進行JOINS(左/右/內部dude ..)並按LIKE進行搜索? 通過精確(標簽=“ XXX”)還是全文搜索?

這種方法正確/快速嗎? 我不知道如何以大行數和大流量運行此程序。

三個表可以解決問題:

內容,標簽和ConTag。 ConTags將是一個包含contents.id和hashtags.id的聯結表。 這樣,您可以為目錄中的每個項目分配多個主題標簽。

SELECT * FROM Contents c, Hashtags h LEFT JOIN ConTags t ON c.Id = t.ConId AND h.Id = t.HashId

或者,將Hashtags NameContentId設置為唯一鍵,並且不再需要聯結表

實際上,多一張桌子就足夠了

“標簽”(id(INT11),標簽(VARCHAR(40)),content_id(int11))

現在,您只需按名稱添加hastag即可。 要獲取內容的所有主題標簽,請使用

SELECT hashtag FROM hashtable WHERE content_id=$content_id

要添加刪除主題標簽,請使用其ID或主題標簽本身將其刪除。 要獲取特定哈希標簽的內容,只需使用

SELECT ct.* from hashtable ht, contenttable ct WHERE ht.hashtag=$hastag and ct.id=ht.content_id

等等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM