1
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

注意:如果标签指的是同一篇文章,那么关系度+ 1

这种方法的目的是计算标签之间的关系,有人可以帮我吗?

4

2 回答 2

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++,relationship_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
于 2009-12-24T03:30:35.413 回答
0

我认为你应该有某种“标签类型”,这样你的集合看起来更像:

article_id   tag   tag_type
1            Java  Language
1            c++   Language
2            c++   Language
3            c++   Other

然后你可以很容易地使用COUNT(*)tag_type和分组tag

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

于 2009-12-24T03:48:55.173 回答