繁体   English   中英

SQL - 查找所有相关标签?

[英]SQL - Find all related tags?

我有一个如下所示的关系标签表。 对于所有三个node_id (1,2,3),存在关系tag_id “1”。

CREATE TABLE IF NOT EXISTS `relation` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tag_id` int(10) unsigned NOT NULL,
  `node_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ;

INSERT INTO `relation` (`id`, `tag_id`, `node_id`) VALUES
(1, 1, 1),
(2, 2, 1),
(3, 3, 1),
(4, 4, 1),
(5, 1, 2),
(6, 3, 2),
(7, 4, 2),
(8, 5, 2),
(9, 1, 3),
(10, 3, 3),
(11, 5, 3),
(12, 6, 3);

使用tag_id“1”作为起点,如何获得按发生次数排序的所有标签的列表? 例如,tag_id“3”存在于所有三个node_id记录中 - 而tag_id 4仅存在两次(node_id 1和2)。

结果应如下所示:

tag_id  count
3       3
4       2
5       2
6       1
2       1

更新:对不起,我没有解释得足够好。 当我说“tag_id”1“作为起点”时,我的意思是如果我搜索到tag_id的关系 - 我怎么能按出现顺序排序呢?

我想找到所有与tag_id相关的tag_id,一个按count排序。 这将允许我查看与tag_id 1一起使用的所有tag_id编号。继续上面的示例 - 对于具有tag_id 1的node_ids,tag_id“3”应该是最常用的tag_id。

更新2:我想我在这里找到了答案

SELECT tag_id, COUNT(*) as count FROM relation
WHERE tag_id != 1 AND node_id IN
(
    SELECT node_id FROM relation WHERE tag_id = 1
)
GROUP BY tag_id ORDER BY count DESC LIMIT 0,10

这种方法比LEFT JOIN更好吗? 有什么我可以做的来提高它的速度吗?

select tag_id, Count(*) as TagCount
from relation
where tag_id <> 1
group by tag_id
order by Count(*) desc

这会有用吗?

SELECT tag_id, COUNT(*)
FROM relation
GROUP BY tag_id
ORDER BY COUNT(*) desc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM