注1:中文翻译为简略版,欲知详情请看英文原版。
在Oracle中,使用NTILE函数可以优雅的生成标签云图。
SELECT name tag_name,
num_results_per_tag,
ntile($numFontSizesInCloud) over (ORDER BY num_results_per_tag) as font_size
FROM (SELECT name,
num_results_per_tag
FROM tag
ORDER BY num_results_per_tag DESC)
WHERE rownum <= :num_tags
ORDER BY name;
这个语句的作用是使所有的tag和该tag项的数目按tag分类,并按数目排序(所以最流行的tag在最前面)。可以通过:num_tags参数指定云图的tag数目。(注意:可以替换这个子句,使用行数来限制tag的数目。可以使用子查询来取回特定的tag集,例如,user-specific tags, page-specific tags, 等等)
在决定要取回多少tag后,使用NTILE函数把所有的tag放到一个或多个"buckets"中。多少个"buckets"取决于查询语句中$numFontSizesInCloud的值。
然后修改你的CSS确定字符大小或者想要赋予的类别名称。
注2:
NTILE 功能描述:将一个组分为"表达式"的散列表示,例如,如果表达式=4,则给组中的每一行分配一个数(从1到4),如果组中有20行,则给前5行分配1,给下5行分配2等等。如果组的基数不能由表达式值平均分开,则对这些行进行分配时,组中就没有任何percentile的行数比其它percentile的行数超过一行,最低的percentile是那些拥有额外行的percentile。例如,若表达式=4,行数=21,则percentile=1的有5行,percentile=2的有5行等等。(摘自:http://blog.chinaunix.net/u/29553/showart_542552.html oracle函数分析手册)