SQL分层查询4级和

时间:2017-09-03 01:02:55

标签: php mysql stored-procedures hierarchical-data

我有您现在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帮忙!

0 个答案:

没有答案