如何使用SQL获取标记关系结果?

时间:2009-12-24 03:18:34

标签: sql tagging database-relations

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

这种方法的目的是计算标签之间的关系,任何人都可以帮我解决这个问题吗?

2 个答案:

答案 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_typetag分组。

假设(没有尝试用U和我做出PRES)你有一堆其他tag_types,那么我不确定如何最好地将tag_types分配给标签,你可能会发现它比我更容易。但这绝对是要走的路。