获取相关标签的数量

时间:2009-10-31 03:12:05

标签: sql-server tags

我最近问过这个问题,以获取Stack Overflow中的相关标签: what is the query to get "related tags" like in stack overflow

我想在Stack Overflow中显示计数,所以对于每个相关标签,第一个标签的问题上这个其他标签的数量是多少?

因为这些查询都有不同的含义。我不认为这是可能的,但显然Stack Overflow必须这样做(除非他们在多个查询中这样做。)

有没有办法在同一个查询中统计相关标签,还是必须在不同的查询中完成?

2 个答案:

答案 0 :(得分:4)

您可以搜索相关标签的总数:

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表。

答案 1 :(得分:1)

如果是这种情况,那么您可以使用这样的查询......

links(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

此查询应该为您提供标记ID列表,标记名称以及所有选定链接标记和与该链接标记关联的所有标记的计数。男人听起来很混乱,但我认为这就是你要找的东西。

相关问题