1

有没有其他方法可以在没有临时表的情况下从 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;

+----------+------+
| 关键词 | 计数 |
+----------+------+
| 电脑 | 10 |
| 路| 4 |
| 树 | 4 |
| 窗口 | 4 |
| 自然 | 4 |
| 森林 | 3 |
| 汽车 | 3 |
| 马自达 | 3 |
| 摘要 | 3 |
| 搞笑 | 3 |
| 运动 | 3 |
| 海| 高分辨率照片| CLIPARTO 3 |
| 城市| 3 |
| 战士 | 2 |
| 鸟| 高分辨率照片| CLIPARTO 2 |
| 灯| 1 |
| 夏天| 1 |
| 空间 | 1 |
| 黄昏 | 1 |
| Ubuntu | 1 |
+----------+------+

解释:

+----+-------------+--------+--------+- --------------+---------+---------+------+------+- ---------------------------------------------+
| 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 |
+----+-------------+--------+--------+- --------------+---------+---------+------+------+- ---------------------------------------------+
| 1 | 初级 | 关键词 | 索引 | 空 | 关键词 | 99 | 空 | 20 | 使用索引;使用临时的;使用文件排序 |
| 1 | 初级 | | 全部 | 空 | 空 | 空 | 空 | 54 | |
| 2 | 派生 | 壁纸_关键词 | 索引 | 空 | 初级 | 3 | 空 | 54 | |
+----+-------------+--------+--------+- --------------+---------+---------+------+------+- ---------------------------------------------+
3 行一组(0.00 秒)

编辑 另一个查询: 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';)方法算吗?

4

1 回答 1

4

为了计算每个关键字的总值,您可以在表关键字中使用附加字段 (total_count),并且通过每次添加新关键字向该字段添加 +1 - 当您将拥有 100 000 条记录时,这对您的数据库来说真的更简单。

于 2012-11-13T14:03:20.277 回答