用 mysql 标记云
Posted
技术标签:
【中文标题】用 mysql 标记云【英文标题】:tag cloud with mysql 【发布时间】:2012-11-01 21:34:41 【问题描述】:有没有其他方法可以在没有临时表的情况下从 mysql 制作标签云?
mysql> 解释壁纸关键字; +--------------+-----------+------+--- --+---------+----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +--------------+-----------+------+--- --+---------+----------------+ |编号 | mediumint(7) 无符号 |否 |优先级 |空 |自动增量 | |壁纸_id | mediumint(7) 无符号 |是 |穆尔 |空 | | |关键字 ID | smallint(5) 无符号 |是 |穆尔 |空 | | +--------------+-----------+------+--- --+---------+----------------+ mysql>解释关键字; +---------+----------+------+-----+-- -------+----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +---------+----------+------+-----+-- -------+----------------+ |编号 | mediumint(7) 无符号 |否 |优先级 |空 |自动增量 | |关键词 | varchar(32) |是 |统一 |空 | | +---------+----------+------+-----+-- -------+----------------+
SELECT k.keyword,count(k.keyword) AS count FROM keywords k Left Join wallpaper_keywords wk ON wk.keyword_id = k.id GROUP BY wk.keyword_id, k.keyword ORDER BY count DESC limit 100;
编辑
另一个查询:
SELECT count,k.keyword from (SELECT * , count(wk.keyword_id) AS count FROM wallpaper_keywords wk GROUP BY wk.keyword_id LIMIT 50000) as data left join keywords as k on k.id = data.keyword_id order by count desc limit 500
+----+-------------+------------+--------+----- ----------+------------+---------+---------------- -+--------+----------------+ |编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外 | +----+-------------+------------+--------+-------- --------+------------+---------+------------------+- -----+----------------+ | 1 |初级 | |全部 |空 |空 |空 |空 | 20 |使用文件排序 | | 1 |初级 | ķ | eq_ref |初级 |初级 | 3 |数据.keyword_id | 1 | | | 2 |派生 |周 |索引 |空 |关键字 ID | 3 |空 | 59 | | +----+-------------+------------+--------+-------- -------+------------+---------+-----------------+- -----+----------------+
现在的问题是 - 有没有更好的解决方案?更便宜的(SHOW STATUS LIKE 'last_query_cost';)怎么算?
【问题讨论】:
【参考方案1】:为了计算每个关键字的总值,您可以在表关键字中使用附加字段 (total_count),并通过每个添加新关键字向该字段添加 +1 - 将来您的数据库将变得更加简单,当您将拥有 100 000 条记录时.
【讨论】:
需要至少用 100k 条记录测试 ir :) 但无论如何,我决定只计算最后 20k 条记录,因为我的标签云只有 300~ 个单词以上是关于用 mysql 标记云的主要内容,如果未能解决你的问题,请参考以下文章