3

私はこの問題に 2 日間取り組んできましたが、まだ解決策を思いつきませんでした。私は現在、ユーザーがメンバーIDを使用して他のユーザーを登録できるWebサイトを設計しているため、ポイントを許可できます.サイトのメインゲームの1つは、ユーザーが他の2人のユーザーを登録した場合、パーセンテージが1に等しいことを要求します.次に、この 2 人のユーザーがそれぞれ 2 人のユーザーを登録しているかどうかを再帰的にチェックし、パーセンテージを 3 に増やします。したがって、1 番目以外に見つかったレベルごとに、パーセンテージを 2 ずつ増やす必要があります。

これがうまくいくと思われる方法を示す小さな図を次に示します。

                                             [A]
                                    [B]             [C]
                                  [D] [E]         [F] [G]
                                [H][I] [j][k]   [l][m] [o][p]

A は、パーセンテージを求めたいメンバーを表します。He は [B] と [C] を登録し、彼のパーセンテージ = 1 B は [D] と [E] をパーセンテージ +=1 に登録します。C は、[F] と [G] をパーセンテージ + に登録します。 =1.したがって、このチェック レベルではパーセンテージは 3 になります。

ここに私が思いついた機能がありますが、不完全であり、機能しないと確信しています。行き詰まっています。助けてください。

function calcpercentage($id)
 {
  $count=0;
  $percent=1;
  $id1=$id;
  $sql="SELECT * from bs100049 WHERE RefId='$id1'";
  $checkh=mysql_query($sql) or die('error'.mysql_error());
  while($result=mysql_fetch_array($checkh)&& $count<=2)
  {
   $count++;
   $id1=$result['MemberId'];
   $percent++;
  }
 }

私もmysqlで作業しているので、簡単にはなりません。関数を理解したら、ユーザーごとに動的にそのツリーを上に描画する関数を作成できると確信しています。

これがより良い説明です(ダンの答えの後にこれを投稿したかったのですが、できませんでした)このサイトがどのように設計されているかを次に示します。既存のメンバーがあなたの紹介者である場合にのみ登録できます。保存されます。この形式 (id,name,memberid,refid) で登録すると、さまざまなゲームへの参加を申し込むことができます。bs100049 ゲームでは、購入して 2 人のユーザーを自分で登録する必要があります。すでに 1% を獲得しています。両方の登録ユーザーが上記の操作を完了している場合 (それぞれが 2 人のユーザーを登録している場合) に限り、パーセンテージは 1 から 3 に増加し、パーセンテージの次の値は 5 などになります。ユーザーが bs100049 ゲームを購入した場合、

4

2 に答える 2

0

これが私のアプローチです。mysql関数は非推奨になるため、PDOまたはmysqliへの切り替えを検討する必要があることに注意してください。例のために、私はそれらを使用しました。また、データが実際にツリーを形成していることを確認する必要があります。そうしないと、無限ループに陥ることになります。

再帰を回避できる場合は、試してみてください。

参照されたユーザーのIDは、idという列のテーブルに存在すると想定しています。また、紹介されたユーザーが2人を超えることはないと想定し、2人に制限します。

function calc($id) {

    $sql = "SELECT * FROM bs100049 WHERE RefId='$id' LIMIT 2";
    $res = mysql_query($sql);

    if(mysql_num_rows($res) == 2) {
        // We have two referred users (1 point) and if calc returns 1 we add 1 for each user.

        $user1 = mysql_result($res, 0, 'id');
        $user2 = mysql_result($res, 1, 'id');

        return 1 + (1 * calc($user1)) + (1 * calc($user2));
    }
    // If we get here we have 0 or 1 referred users.
    return 0;
}
于 2012-12-12T19:59:54.897 に答える
0

再帰的にするには、最初に最終ケースを定義する必要があると思います-ユーザーが2人のユーザーを登録していない場合:

function calcpercentage($id){

    //SQL to get $count (number of users this user has referred) + also array of usr ids at this 'level'

    foreach($usr_ids as $usr_id){

        if($count<2){
            return 0;
        }else{
            return 1+calcpercentage($usr_id);
        }
    }
}
于 2012-12-12T19:58:59.967 に答える