如何选择所有用户推介?
| 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;
}
答案 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;如果它存在于表中