2009-10-31 79 views
1

的获取计数我最近问这个问题得到相关的标签,如在堆栈溢出: what is the query to get "related tags" like in stack overflow相关标签

我想显示计数像堆栈溢出,因此与各相关标签,什么是计数这个其他标签的问题与第一个标签?

因为这些查询都有不同的内容。我不认为这是可能的,但显然堆栈溢出必须这样做(除非他们在多个查询中这样做)。

是否有任何方法可以在同一个查询中获得所有相关标签的计数或者是否必须在单独的查询中完成?

回答

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

+0

这似乎不起作用,因为它可以单独给出这些标签的总数。不是新旧标签的标签数 – leora 2009-10-31 13:33:54

+0

呃,这更容易,回答编辑。对人们付出努力的回答(Ryan的回答也一样)并不是很好, – Andomar 2009-10-31 16:48:06

1

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

链接(ID,LINKNAME)
标签(ID,标签名)
tagsBridge(标签识别,的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,标签名称和所有被选择的链接的每个标签的数量,并与该链接的标签相关联的所有标签的列表。听起来令人困惑的人,但我认为这就是你要找的。

+0

与上述链接问题相同的表结构 – leora 2009-10-31 03:26:18

+0

也许我的问题不清楚。我想显示“相关”标签的数量。所以我选择了“旅行”,例如我希望看到所有其他标签的计数,其中有问题也有旅行,并且该特定标签 – leora 2009-10-31 03:43:50