如何实现一个标签云
需求场景:
给某个文章添加关键字后,需要将所有文章的关键字提取出来按引用数量最多的排序,然后显示在标签云上面。就像这样:
由于添加关键字的时候是用逗号分隔,所以保存到数据库的时候就是以逗号分隔的字符串形式存在,但是这样在查询标签的是作为一个整体查出来的,在通过数量排序上并不准确,所以需要将用逗号分隔的数据先拆开再按拆开的数量大小排序。
在mysql中,可以通过新建一张Id从0开始的autoId的表来进行处理:
SELECT DISTINCT
substring_index( substring_index(a.keywords,',', b.id + 1 ), ',' ,- 1 ) AS
keywords2, count(substring_index( substring_index(a.keywords,',', b.id + 1 ),
',' ,- 1 )) as num
FROM pages a JOIN
autoId b ON b.id < (length(a.keywords) - length(REPLACE (a.keywords, ',',
'') ) + 1) WHERE a.keywords!='' group by keywords2
ORDER BY num DESC
先将字符串拆开,再查拆开的字符串的数量,通过group by和order by就能实现上述功能了。
最终效果如下:
发表评论 (审核通过后显示评论):