Получение количества связанных тегов

Недавно я задал этот вопрос, чтобы получить связанные теги, например, в Stack Overflow: каков запрос на получение связанных тегов, например, при переполнении стека

Я хотел бы показать количество, как в Stack Overflow, поэтому для каждого связанного тега, каково количество этого другого тега в вопросах с первым тегом?

Потому что у всех этих запросов есть разные. Я не думаю, что это возможно, но очевидно, что Stack Overflow должен это делать (если только они не делают это в нескольких запросах).

Есть ли способ получить количество связанных тегов в одном запросе или это нужно делать в отдельных запросах?


person leora    schedule 31.10.2009    source источник


Ответы (2)


Вы можете искать общее количество связанных тегов:

SELECT t2.tagname, count(distinct tb2.linkid) as RelatedLinkCount
FROM TAGS t2
JOIN TAGS_BRIDGE tb2 on t2.tagid = tb2.tagid
JOIN TAGS_BRIDGE tb1 on tb2.linkid = tb1.linkid
JOIN TAGS t ON t.id = tb1.tagid
WHERE t.tagname = 'tag3'
GROUP BY t2.tagname

Начиная с имени тега (t), он ищет ссылки для этого тега (tb1), а затем ищет теги, которые разделяют ссылку (tb2). Он ищет имя для связанных тегов (t2) и готово :) Нет необходимости даже присоединяться к таблице LINKS.

person Andomar    schedule 31.10.2009
comment
похоже, это тоже не работает, поскольку дает мне общее количество этих тегов по отдельности. не количество тегов, где есть как новый, так и старый тег - person leora; 31.10.2009
comment
Ну это еще проще, ответ отредактировал. Не очень приятно отрицать ответы, над которыми люди прилагают усилия (то же самое для ответа Райана) - person Andomar; 31.10.2009

Если это так, вы можете использовать такой запрос ...

ссылки (id, linkName)
теги (id, tagName)
tagsBridge (tagID, linkID)

Я думаю, вам нужен следующий запрос ...

SELECT T.id, T.tagName, COUNT(TB.tagID) 
FROM tagsBridge TB 
INNER JOIN tags T ON TB.tagID = T.id GROUP BY T.id, T.tagName

О, мои извинения, я неправильно понял вопрос ... то, что, я думаю, вам нужно, это то, хотя он использует вложенные запросы ...

SELECT T.id, T.tagName, COUNT(TB.tagID) 
FROM tagsBridge TB 
INNER JOIN tags T ON TB.tagID = T.id
WHERE TB.tagID IN (
  SELECT tagID FROM tagsBridge WHERE linkID IN (
    SELECT linkID FROM tagsBridge WHERE tagID IN (
      SELECT tagID FROM tagsBridge WHERE linkID = (THE SELECTED LINK)
    )
  )
)
GROUP BY T.id, T.tagName

Этот запрос должен предоставить вам список идентификаторов тегов, имен тегов и их количество для всех тегов выбранной ссылки и всех тегов, связанных с тегами этой ссылки. Парень, это звучит сбивающе с толку, но я думаю, это то, что ты ищешь.

person Ryan    schedule 31.10.2009
comment
та же структура таблицы, что и связанный вопрос выше - person leora; 31.10.2009
comment
возможно, мой вопрос был непонятен. я хочу показать количество связанных тегов. Итак, я выбрал поездки, например, я хочу увидеть количество всех других тегов, где есть вопросы, которые также имеют поездки и этот конкретный тег - person leora; 31.10.2009