我有一个表用户有2个关键的referrer列和referral_code,它是树结构的简单实现。目标是根据推荐他们使用此应用程序的人来获取用户的踪迹。
IsSelected
我需要一个递归查询,其中基于触发器,例如NAME | Referrer | Referral_Code
----------------------------------------------
Super User | 000 | 001
User A | 001 | 002
User B | 002 | 003
User C | 003 | 004
User n | 00n | 00n-1
活动的报告可以在引用者上产生最大深度为4的跟踪字符串。
我想要的输出字符串是User C
,这意味着根据用户活动跟踪引荐。树可以在无限深度上生长,因此,跟踪004-003-002-001
的痕迹可以产生在引用代码上连接的树上的4个人的堆栈跟踪。
我使用User QA
作为doctrine 2.5
。
约束
答案 0 :(得分:0)
Somnambulist.tech构建了一个通用表表达式(CTE)Doctrine表达式构建器,该构建器是用于对将位于WITH子句中的子句进行别名处理的包装器。
https://github.com/somnambulist-tech/cte-builder
简单的例子:
$eb = new ExpressionBuilder($connection);
$eb->createExpression('tacos');
$eb->tacos->select('id', 'type')->from('tacos'); // or $eb->get('tacos');
$eb->execute();
答案 1 :(得分:-1)
如果4的深度是固定的,那么你不需要递归,只需要自己加入4次。 如果您真的想使用递归,可以为dbms编写自己的DQL函数。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html