Php 如何选择所有用户推荐id?

Php 如何选择所有用户推荐id?,php,Php,如何选择所有用户推荐 | id | user_id | friend_id | |-------|--------------------|--------------| | 1 | 1 | 2 | | 2 | 2 | 3 | | 3 | 3 | 4 | | 4 |

如何选择所有用户推荐

| id    |            user_id |    friend_id |
|-------|--------------------|--------------|
| 1     |                1   |          2   |
| 2     |                2   |          3   |
| 3     |                3   |          4   |
| 4     |                10  |          15  |
因此,在上面的实例中,用户1的推荐线索为3,因为他们推荐的人,推荐了某人,然后他们推荐的人推荐了其他人

作为一个php函数来做可能更好,但我正努力想弄清楚它

下面是我的代码

public function has_child($referee_referees){
        $this->db->select("user_account_phone");
        $this->db->where('referee_phone_number', $referee_referees);

        $query = $this->db->get('account');

        if($query->num_rows() == 0) {

            return FALSE;

        }

        return TRUE;
    }



    public function get_referee_referee_details($user_account_phone){
            $this->db->select('user_account_phone');
            $this->db->where('referee_phone_number', $product_phone_number);
            $query = $this->db->get('account');

            foreach($query->result() as $rows){
                $child_ids[$rows->user_account_phone] = $rows->user_account_phone;
                $referee_referees = $rows->user_account_phone;

                if($this->has_child($referee_referees)){
                    $child_ids[$rows->user_account_phone] = $this->get_referee_referee_details($rows->user_account_phone);  
                }

                echo "<pre>";
                var_dump($child_ids);
                echo "</pre>";


                return $child_ids;

            }


        // return $child_ids;
    }

您必须编写一些代码来迭代结果

此代码非常粗糙,不适用于已推荐多人的用户

$users = array(
    array("id" => 1, "user_id" => 1 , "friend_id" => 2,),
    array("id" => 2, "user_id" => 2 , "friend_id" => 3,),
    array("id" => 3, "user_id" => 3 , "friend_id" => 4,),
    array("id" => 4, "user_id" => 10, "friend_id" => 15,),
);

function getRefferrals(&$users, $userId)
{
    $referrals = 1;

    foreach($users as $user) {
        if($user["user_id"] == $userId) {
            $referrals += getRefferrals($users, $user["friend_id"]);
        }
    }

    return $referrals;
}

$referrals = getRefferrals($users, 1) - 1;
var_dump($referrals);
有趣的问题

我试过了最短的代码

这将起作用-您可以使用不同的数据进行测试


从演示中选择friend_id,其中user_id=1,或在演示中选择user_id,如果内存中的数据对于大表来说是有问题的


如果内存中没有数据,可以检查用户是否有friend_id,以及该id是否存在于表中

这是数据库吗?你在使用MySQL吗?到目前为止,您尝试了什么?显示您的代码您尝试了什么。从referraliam使用MySQL中选择*在要求其他人为您编码之前,您应该首先定义您的代码。别忘了更改该表上的表名。。。它的演示在我的查询中…你可以改变这一点谢谢你,我正在使用CODEIGNITER,我正在寻找解决方法。到时会通知你的。你真是一个伟大的人你好,卡托纳。亚伯,非常感谢,它很管用。我非常感谢你的帮助
$users = array(
    array("id" => 1, "user_id" => 1 , "friend_id" => 2,),
    array("id" => 2, "user_id" => 2 , "friend_id" => 3,),
    array("id" => 3, "user_id" => 3 , "friend_id" => 4,),
    array("id" => 4, "user_id" => 10, "friend_id" => 15,),
);

function getRefferrals(&$users, $userId)
{
    $referrals = 1;

    foreach($users as $user) {
        if($user["user_id"] == $userId) {
            $referrals += getRefferrals($users, $user["friend_id"]);
        }
    }

    return $referrals;
}

$referrals = getRefferrals($users, 1) - 1;
var_dump($referrals);