【问题标题】:SQL Count childrens from a hierarchical database table来自分层数据库表的 SQL 计数子项
【发布时间】:2019-05-02 01:49:33
【问题描述】:

我有一个分层数据库表,其中包含上述数组中的成员,包括父项和子项(mlm 结构/树)。

表名是成员,表中的字段是上述数组中的元素(userid、referenceid、name、surrname)。

如何计算一个用户 ID 的所有孩子?让我们以userid = 5 有孩子一个孩子有孩子为例。

我希望 SQL 代码将用户 ID 计算为所有子项和子项。

谢谢!

Array
(
[0] => Array
    (
        [userid] => 3
        [referenceid] => 4
        [name] => Bandil
        [surname] => Kazim
    )

[1] => Array
    (
        [userid] => 1
        [referenceid] => 2
        [name] => Zarki
        [surname] => Andrew
    )

[2] => Array
    (
        [userid] => 5
        [referenceid] => 1
        [name] => Mirko
        [surname] => Paul
    )

[3] => Array
    (
        [userid] => 2390189598
        [referenceid] => 5
        [name] => Matias
        [surname] => Clark
    )

[4] => Array
    (
        [userid] => 4
        [referenceid] => 
        [name] => Duncan
        [surname] => Christoph
    )

[5] => Array
    (
        [userid] => 2
        [referenceid] => 3
        [name] => Zar
        [surname] => Jamal
    )

[6] => Array
    (
        [userid] => 123123
        [referenceid] => 5
        [name] => Victor
        [surname] => Dobrinski
    )

[7] => Array
    (
        [userid] => 9
        [referenceid] => 2390189598
        [name] => Slav
        [surname] => Jorgasen
    )

[8] => Array
    (
        [userid] => 4057926110
        [referenceid] => 5
        [name] => Joseph
        [surname] => Vladinski
    )

[9] => Array
    (
        [userid] => 10
        [referenceid] => 2390189598
        [name] => Jala
        [surname] => David
    )

[10] => Array
    (
        [userid] => 7568954902
        [referenceid] => 4057926110
        [name] => ohn
        [surname] => macaron
    )
)

【问题讨论】:

  • refferenceid 代表什么?父母的 id ?
  • 嘿,是的。 refferenceid 字段显示父 ID。
  • 这里没有php或mysql,只有天知道生成的数组输出。有人给出了答案;看到那个。

标签: php mysql sql count


【解决方案1】:

如果 REFERENCEID 是父亲的 ID,这是一种方式

SELECT 
    REFERENCEID, COUNT(*)
FROM
    (SELECT 
         USERID, REFERENCEID 
     FROM 
         MEMBERS
     WHERE 
         REFERENCEID IS NOT NULL
     UNION
     SELECT 
         B.USERID AS USERID, A.REFERENCEID AS REFERENCEID
     FROM 
         MEMBERS A
     LEFT JOIN 
         MEMBERS B ON A.USERID = B.REFERENCEID
     WHERE 
         B.USERID IS NOT NULL AND A.REFERENCEID IS NOT NULL) TOT
GROUP BY 
    REFERENCEID;

结果是每个REFERENCEID的儿子和侄子的计数;如果你想通过REFERENCEID在联合中使用的两个集合上知道儿子的数量和侄子的数量。

【讨论】:

  • 感谢您的帮助。我收到此错误“#1222 - 使用的 SELECT 语句的列数不同”
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多