我在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这就是问题((
答案 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;