我有您现在ID和parentID的客户的层次表。还有一个名为depth的列,whitch表示它们在层次结构中的深度。例如,Client1具有ID 1,并且他也位于层次结构的顶部,因此他具有深度1.他的孩子Client2具有ID 7和深度2.深度是重要的因为我有查询,我想要选择客户端他们的父母whos深度为最大parentDepth + 4(限制深度选择)。现在让我们转向概率。对于4个级别的每个孩子,父母客户都有一些钱。 250,100,50和25基于它们的深度。我需要构建查询来选择所有客户以及我应该向他们支付多少钱。
如果他的层次结构中没有更多客户端,那么用于exaple的Client1将具有250。我整夜都在解决这个问题。你能帮忙吗?最好的选择是这样的:
ClientID | sum
5 | 550
6 | 400
等等。
我能做的最好的是:
SET @myDepth = 1;
SET @ID = 22;
Select Client.ID, sum from Client JOIN (
select SUM(depthValue) as sum, ID from (
select depth, validTo, ID from( select ID, owner, depth, validTo
from Client order by owner, ID) products_sorted, (SELECT @pv := @ID)
initialisation where find_in_set(owner, @pv) > 0 and
@pv := concat(@pv, ',', ID)) as Ty
INNER JOIN depthTable ON Ty.depth - @myDepth = depthTable.dep where
Ty.depth <= @myDepth + 5) as ano
WHERE Client.ID = @ID
还使用了名为depthTable的第二个表,它只包含4个记录,并且只有2个列:dep(1,2,3,4)和depthValue(250,100,50,25)。我用它作为枚举。此代码只能选择一个具有预定义ID和深度的客户端。 Plz帮忙!