制作"标签"系统的最佳方式

Zen*_*nth 8 php mysql performance myisam innodb

这可能是一个问题,我失去了更多的时间来思考如何做到正确,思考以最佳的优化方式去做.

我有一个表"内容",并且需要添加选项以将多个"hashtags"或"tags"或"keywords"关联到内容,例如,像"Fried potatos with ketchup"这样的内容具有"键": "土豆","番茄酱"和"炒".

当我用一个单词进行搜索时,例如"马铃薯",我需要显示其中的内容标记这个单词.

问题是,它的最佳结构是什么,考虑结果的速度,因为内容表是MyISAM mith超过30 Millon行.

我想在这:

再添2个表,"contents_hashtags" (id(INT11), content_id(INT11), hashtag_id(INT11))和"hashtags" (id(INT11), hashtag(VARCHAR(40)))InnoDB中的2个表

当用户创建/修改表格内容时,我在hashtags表中搜索并获取ID,如果不存在的标签,则在表格标签中创建它,如果存在,则获取ID,使用此ID创建插入在表contents_hashtas中关联内容<-contents_hashtas-> hashtahs

在搜索中,使JOINS(LEFT/RIGHT/INNER dude ..)并通过LIKE进行搜索?通过exact(hashtag ="XXX")或FULL TEXT SEARCH?

这种方法是正确/快速的吗?我不知道如何以大排量和大流量来运行它.

Som*_*jee 2

其实多一张桌子就够了

“主题标签”(id(INT11),主题标签(VARCHAR(40))),content_id(int11))

现在您可以简单地按名称添加标签。要获取内容的所有主题标签,请使用

SELECT hashtag FROM hashtable WHERE content_id=$content_id
Run Code Online (Sandbox Code Playgroud)

要添加、删除主题标签,请使用其 id 或主题标签本身将其删除。要获取特定主题标签的内容,只需使用

SELECT ct.* from hashtable ht, contenttable ct WHERE ht.hashtag=$hastag and ct.id=ht.content_id
Run Code Online (Sandbox Code Playgroud)

等等