Как получить результаты отношений тегов, просто используя SQL (s)? - PullRequest
1 голос
/ 24 декабря 2009
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

Цель этого подхода - вычислить отношения между тегами. Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

Что-то вроде:

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
0 голосов
/ 24 декабря 2009

Я думаю, у вас должен быть какой-то "тип тега", чтобы ваш набор выглядел больше как:

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

Тогда вы можете просто использовать COUNT(*), группируя по tag_type и tag.

Предполагая (не пытаясь сделать PRES из U и ME), что у вас есть куча других tag_types, я не уверен, как лучше назначить tag_types тегам, и вы, вероятно, найдете это проще, чем я. Но это определенно путь.

...