Mysql树遍历和计数

时间:2016-08-18 16:41:12

标签: php mysql

我在mysql中有了下表

id|top_id|amount
 1    NULL     2
 2    NULL     8
 3    NULL     4
 4       3     7
 5       2     8
 6       2     4
 7       5     5
 8       7     1
 9       6     6
10       8     6

对于前3个ID,我需要总结其所有继承者的数量,以获得以下内容:

id   |  amount
1         8
2         32
3         11

我想应该有联接但不幸的是我无法获得有效的mysql请求。有人可以帮帮我吗?

UPD:在php中我有以下查询:

$tops = $mysqli->query('SELECT * FROM table WHERE top_id IS NULL')

显然只返回3个顶级ID和它们的平均数量(分别为2,8和4)。而不是2,8和4我需要得到12,28和11这就是问题((

1 个答案:

答案 0 :(得分:0)

这是最原始的解决方案......毫无疑问,有人会在短期内为可扩展的解决方案提供一些提示(可能采用PHP)......

SELECT a.id
     , COALESCE(a.amount,0)
     + COALESCE(b.amount,0)
     + COALESCE(c.amount,0)
     + COALESCE(d.amount,0)
     + COALESCE(e.amount,0)
     + COALESCE(f.amount,0) total 
  FROM my_table a 
  LEFT 
  JOIN my_table b 
    ON b.top_id = a.id 
  LEFT 
  JOIN my_table c 
    ON c.top_id = b.id 
  LEFT 
  JOIN my_table d 
    ON d.top_id = c.id 
  LEFT 
  JOIN my_table e 
    ON e.top_id = d.id 
  LEFT 
  JOIN my_table f 
    ON f.top_id = e.id 
 WHERE a.top_id IS NULL;