如何选择所有用户推荐ID?

时间:2017-07-25 06:57:21

标签: php

如何选择所有用户推介?

| 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;
    }

3 个答案:

答案 0 :(得分:0)

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

此代码非常粗略,对于提及多个人的用户不起作用。

function get_referral_count($userId) {
    $count = 0;
    // Just an example, you should escape this query!
    while ($res = // SELECT * FROM user_referral where user_id = $userId;) 
    {
        $userId = $friendId;
        $count++;
    }
    return $count;
}

答案 1 :(得分:0)

有趣的问题

我为你试了最短的代码

这将有效 - (您可以使用不同的数据进行测试)

从demo中选择friend_id,其中user_id = 1或user_id IN(从演示中选择friend_id)

答案 2 :(得分:0)

如果你有内存中的数据(这对大表有问题)

$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);

如果您没有内存中的数据,您可以检查用户是否有&#34; friend_id&#34;如果它存在于表中