【问题标题】:sql, cout number of childrens per each campaigns ancestrysql,计算每个活动祖先的孩子数
【发布时间】:2016-07-08 11:50:12
【问题描述】:

如何在 sql 中计算祖先中每个名字的孩子数,如树形结构

ID | NAME                    | PATH
100 | Electronics & Computers | /100
101 | Games                   | /100/101
102 | Xbox360                 | /100/101/102
103 | PS4                     | /100/101/103

所以我应该有类似的东西

100 | 3
101 | 2
102 | 0
103 | 0

非常感谢您的帮助

【问题讨论】:

    标签: mysql sql ruby-on-rails ancestry


    【解决方案1】:

    这是一种使用自联接和聚合的方法:

    select t.id, count(t2.id)
    from t left join
         t t2
         on t2.path like concat(t.path, '/%')
    group by t.id;
    

    【讨论】:

    • 所以 t 和 t2 是 2 个表?我的意思是我的名称和路径示例在同一个表中
    • 效果很好,只是有一个小问题,即第一个元素的路径为零,这对他来说不算数,但也许我可以解决它
    • @urbanczykd 。 . . + 1 会解决这个问题吗?
    【解决方案2】:
    SELECT A.id,
            (SELECT count(B.id) FROM `tablename` B where path like CONCAT('%/', A.id, '%' ) and B.id != A.id) count
        FROM `tablename` A
    

    试试这个。 http://sqlfiddle.com/#!9/51b7b/1

    【讨论】:

    • 同样的问题,抱歉忘记提到第一个条目的路径 = nil
    猜你喜欢
    • 2013-11-22
    • 2011-07-23
    • 2021-02-05
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多