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で再帰関数を作成することです。この関数は、1人のユーザーからの参照を返し、それぞれのユーザーで再度呼び出します。

もう1つのオプションは、SQLで直接実行することです。たとえば、MySQLは再帰をサポートしていますが、他のRDBMSはサポートしていません。再帰構文が標準SQLでサポートされているかどうかはわかりません。

更新:私は間違っていたようです。MySQLは再帰クエリをサポートしていません。PostgreSQL、Firebird、MSSqlServerなどがそうです。

次の擬似コードは完了する必要があります。私の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 に答える