首页 > 后端开发 > php教程 > 通过标签来检索内容,该如何设计数据库。

通过标签来检索内容,该如何设计数据库。

WBOY
发布: 2016-06-06 20:31:29
原创
1585 人浏览过

比如一篇文章被标记了多个标签,情感,小清新,生活。也就是一篇文章对应多个标签,这样我是做成一篇文章id 对应一篇文章标签id好 还是一篇文章id 对应多个标签id加,连接好?我在考虑文章多了,第一种方式是不是记录就太多了?比如1百万文章,可能有几百万条记录
也就是
1 1
1 2
1 3
1 4

还是
1 1,2,3,4

还有第二种方式 检索是不是很慢?

回复内容:

比如一篇文章被标记了多个标签,情感,小清新,生活。也就是一篇文章对应多个标签,这样我是做成一篇文章id 对应一篇文章标签id好 还是一篇文章id 对应多个标签id加,连接好?我在考虑文章多了,第一种方式是不是记录就太多了?比如1百万文章,可能有几百万条记录
也就是
1 1
1 2
1 3
1 4

还是
1 1,2,3,4

还有第二种方式 检索是不是很慢?

第二种我觉得更好,但是为了保证速度,你要为你的数据库里面的tid字段添加全文索引。
加入你的表明叫article,分类字段叫tid。那么你就要为你的字段添加索引。

<code>ALTER TABLE article ADD FULLTEXT (tid); 
</code>
登录后复制

如果你要查询的tid是1,4,9,25 当你要查询的时候,就这么做:

<code>SELECT * FROM article WHERE MATCH(tid) AGAINST('1 4 9 25');

</code>
登录后复制

极目楚天舒的全文检索能利用索引,确实也是个别出心裁的方法.
另外楼主也可以试试用MySQL的函数FIND_IN_SET:
比如 SELECT FIND_IN_SET('b','a,b,c,d') 将返回2.

比如查询指定标签'php'下的文章:
用FIND_IN_SET可以这样:

<code>SELECT * FROM `posts` WHERE FIND_IN_SET('php', `tags`);
</code>
登录后复制

用MATCH AGAINST可以这样:

<code>SELECT * FROM `posts` WHERE MATCH(`tags`) AGAINST('php');
</code>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板