如何选择所有用户推荐?
| 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"以及表中是否存在
您必须编写一些代码来迭代结果。
此代码非常粗糙,不适用于引用了多个人的用户。
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;
}
有趣的问题
我为您尝试了最短的代码
这将起作用 - (您可以使用不同的数据对其进行测试(
从演示中选择friend_id,其中user_id = 1 或user_id(从演示中选择friend_id(