用 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;

+----------+------+ |关键词 |计数 | +----------+------+ |电脑 | 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';)怎么算?

【问题讨论】:

【参考方案1】:

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

【讨论】:

需要至少用 100k 条记录测试 ir :) 但无论如何,我决定只计算最后 20k 条记录,因为我的标签云只有 300~ 个单词

以上是关于用 mysql 标记云的主要内容,如果未能解决你的问题,请参考以下文章

pytest打标记-mark功能

如何对matlab画出的曲线中的定点进行打标记(并进行标记)

EXCEL中如何用背景色标记数据

删除 MySql 行,或标记“死亡”?

请问怎么才能在腾讯地图上标记自己的位置。

做题套路(持续更新