Table tags:
article_id tag
1 Language
1 Java
1 c++
2 Language
2 c++
3 c++
如何编写SQL(s)查询以生成如下数据:
Table tags_relations:
tag1 tag2 relations_degree
Language C++ 2
Language Java 1
注意:如果标签引用同一篇文章,那么relations_degree + 1
这种方法的目的是计算标签之间的关系,任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
类似的东西:
SELECT A.tag AS tag1, B.tag AS tag2, COUNT(*) as relations_degree
FROM tags A
INNER JOIN tags B ON A.article_id = B.article_id
WHERE A.tag = 'Language' AND a.tag <> b.tag
GROUP BY A.tag, B.tag
ORDER BY B.tag ASC
根据你的例子,我假设你将它限制为tag1 ='Language',否则就是tag1 = Java,tag2 = c ++,relations_degree = 1的情况。为此:
SELECT A.tag AS tag1, B.tag AS tag2, COUNT(*) as relations_degree
FROM tags A
INNER JOIN tags B ON A.article_id = B.article_id
WHERE A.tag > b.tag
GROUP BY A.tag, B.tag
ORDER BY B.tag ASC
答案 1 :(得分:0)
我认为你应该有某种“标签类型”,这样你的设置看起来更像是:
article_id tag tag_type
1 Java Language
1 c++ Language
2 c++ Language
3 c++ Other
然后您可以轻松使用COUNT(*)
,按tag_type
和tag
分组。
假设(没有尝试用U和我做出PRES)你有一堆其他tag_types,那么我不确定如何最好地将tag_types分配给标签,你可能会发现它比我更容易。但这绝对是要走的路。