我正在建立一个网站,要求用户加入下一个推荐人。数据的结构应该是二进制的,因此如果参考者在他们的直接下线中已经有两个子用户,那么被引用的新用户必须在参考者的下线下的一个用户下进行时隙划分,优选已经被引用的第一个用户,以防止他们在他们的直接下线下有两个以上的用户。我正在用codeigniter构建这个系统,我的代码是这样的
public function get_referred_by($refer_id)
{
$where = array('referral_id' => $refer_id);
$parent = $this->get_by($where, true);
$children = $this->db->select('referral_id')
->where('refer_id', $parent->referral_id)
->order_by('users.id desc')
->limit('2')
->get('users')->result();
if(count($children) > 1)
{
for($i = 0; $i<count($children); $i++)
{
$parent = $this->get_referred_by($children[$i]->referral_id);
}
}
return $parent;
}
问题是,使用该代码,我可以跳过下行链路来查找下一个打开的插槽,但是系统没有首先移动下行链路来检查下一个用户是否有空闲插槽,而是停留在一棵树上。例如,用户a加入用户b和c,然后b加入d和e,我想要的是当使用user as'ref id时,而不是返回user ds'ref number它返回user cs'。请帮忙
1条答案
按热度按时间ldioqlga1#
如果您总是希望选择较早的(最左边的)子级,则无需在子级上循环,只需选择第一个: