【问题标题】:Getting count of related tags获取相关标签的计数
【发布时间】:2009-10-31 03:12:04
【问题描述】:

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

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

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

有什么方法可以在同一个查询中获取所有相关标签的计数,还是必须在单独的查询中完成?

【问题讨论】:

    标签: sql-server tags


    【解决方案1】:

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

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

    【讨论】:

    • 这似乎也不起作用,因为它给了我这些标签的总数。不是既有新标签又有旧标签的标签数量
    • 嗯,这更容易,答案已编辑。对人们付出努力的答案投反对票并不是很好(Ryan 的答案也是如此)
    【解决方案2】:

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

    链接(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、标签名称和每个标签的计数。听起来令人困惑的人,但我认为这就是您要找的人。

    【讨论】:

    • 与上面链接的问题相同的表结构
    • 也许我的问题不清楚。我想显示“相关”标签的数量。所以我选择了“旅行”,例如,我想查看所有其他标签的计数,其中有问题也有旅行和特定标签
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多