1

我正在尝试获取存储在数据库中的每个用户的下线数量(用户带来的推荐),例如:

       ------------------------------------
           + UserID      +  refferedby
       ------------------------------------
       l    23           l      80
       l    25           l      23  
       l    36           l      25
       l    75           l      36
       l    98           l      75
       l    24           l      98
       l    209          l      24

25带来的总推荐量应该是:23,80,36,75,98,24,204

伪:

function getalldownlines(){
    // Get all users id  and store in array
    // loop through the array to get each users total downlines by calling function get_all()
}

function  get_all(){
    // get all users downline and downlines brought by user to the last user
    // it should keep count each and every one of them
    return $count;
}

最好的方法是什么?

4

1 回答 1

0

你有几个选择。

第一个也是显而易见的,是在 PHP 中创建一个递归函数,它返回一个用户的推荐,然后用每个用户再次调用自身。

另一种选择是直接在 SQL 中进行。例如 MySQL 支持递归,但其他一些 RDBMS 不支持。我不确定标准 SQL 是否支持递归语法。

更新:似乎我错了。MySQL 不支持递归查询;PostgreSQL、Firebird 和 MS Sql Server 等等。

以下伪代码需要完成。我的 PHP-fu 有点生疏了:

function getalldownlines()
{
    $sqlcmd = "SELECT UserID FROM table";

    // fill array $arr with data from SQL

    foreach ($id in $arr)
    {
        $count = get_all($id);
        $numreferreds[$id] = $count;
    }
}

function get_all($id)
{
    $sqlcmd = "SELECT referredby FROM table WHERE UserId='$id'";

    $count = 0;

    // fill array $arr with data from SQL

    foreach ($referred in $arr)
    {
        $count += get_all($referred);
    }

    return $count;
}
于 2013-02-09T15:43:26.640 回答