如何实现一个标签云

需求场景:

给某个文章添加关键字后,需要将所有文章的关键字提取出来按引用数量最多的排序,然后显示在标签云上面。就像这样:

由于添加关键字的时候是用逗号分隔,所以保存到数据库的时候就是以逗号分隔的字符串形式存在,但是这样在查询标签的是作为一个整体查出来的,在通过数量排序上并不准确,所以需要将用逗号分隔的数据先拆开再按拆开的数量大小排序。

在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就能实现上述功能了。

最终效果如下:

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):