当前位置: 代码迷 >> Java Web开发 >> 标签分组统计如何实现的,求解
  详细解决方案

标签分组统计如何实现的,求解

热度:62   发布时间:2016-04-16 22:16:03.0
标签分组统计怎么实现的,求解?
如下面所示:
id        title                                      tags
1         学习java                             java,数据,jsoup
2         jsoup过滤html代码          jsoup,过滤,xss攻击,java
3         xss攻击的危害                  xss,jsoup
......
......
比如说数据库里面有上面一些记录
怎么得到下面这种结果呀
java(2)   jsoup(3)  数据(1)   xss(1)  xss攻击(1)
就是分类统计标签的数量,类似csdn的热门标签功能,请问这个怎么实现的
------解决方案--------------------
你数据库是什么。你这样的设计不是很好。

比较经典的设计是两套表,你的tags字段,从逗号分隔变成N行:

id        title
1         学习java
2         jsoup过滤html代码
3         xss攻击的危害

id      aid       tag
1       1         java
2       1         数据
3       1         jsoup
4       2         jsoup
5       2         过滤
6       2         xss攻击
7       2         java
...................
------解决方案--------------------
我的是mysql,我看很多设计的都是tags设计成一个字段的,不知道他们是怎么实现这个功能的?

一个字段不会冗余吗?
不如这样
id       tag
 1        java
 2       数据


id        title                                      tags
 1         学习java                             1, 2

------解决方案--------------------
引用:
Quote: 引用:

你数据库是什么。你这样的设计不是很好。

比较经典的设计是两套表,你的tags字段,从逗号分隔变成N行:

id        title
1         学习java
2         jsoup过滤html代码
3         xss攻击的危害

id      aid       tag
1       1         java
2       1         数据
3       1         jsoup
4       2         jsoup
5       2         过滤
6       2         xss攻击
7       2         java
...................

谢谢了,我的是mysql,我看很多设计的都是tags设计成一个字段的,不知道他们是怎么实现这个功能的?


楼主请看“范式”。现行的(基于“行”的)数据库系统,大多不怕行多(相对来说),怕列多或者列复杂
另外,这种方案如果是查找某篇文章有什么标签,以及某个标签有哪些文章,效率还勉强可以。其他性能堪忧
1 指定文章的所有标签,性能基本等价
2 指定标签的所有文章,完全没法用索引,只能使用FIND_IN_SET函数
3 统计所有标签的排行,还是完全没法用索引,只能FIND_IN_SET,如果文章多,或者平均每个文章的标签多的话,比我那个方案(完全只要用到索引)慢上百倍,千倍甚至更多也不是不可能的

当然,如果只是少量文章,少量标签,这个也是可以操作的。不过,你还是要一张完整的标签名称,才能在mysql中间做统计
------解决方案--------------------
引用:
Quote: 引用:

我的是mysql,我看很多设计的都是tags设计成一个字段的,不知道他们是怎么实现这个功能的?

一个字段不会冗余吗?
不如这样
id       tag
 1        java
 2       数据


id        title                                      tags
 1         学习java                             1, 2
  相关解决方案