使用递归来查找用户是否是另一个用户php mysql的引用者

时间:2012-12-12 19:27:42

标签: php mysql

我一直在努力解决这个问题两天,但我仍然无法提出解决方案。我目前正在设计一个网站,用户可以通过其memberid的方式注册其他用户,以便我们可以允许他积分。网站中的主要游戏之一要求如果用户已经注册了另外两个用户,则他的百分比等于1。然后该函数必须递归检查这两个用户中的每一个,如果他们也分别注册了两个用户,那么将百分比增加到3.对于除了第一个之外发现的每个级别,百分比必须增加2;

这是一个小图表,告诉你它应该工作:

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

A代表我们想要找到百分比的成员。注册[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,所以不容易。可以肯定的是,一旦我找到了这个函数,我就可以编写一个函数来为每个用户动态绘制上面的树。

这里是一个更好的解释(我想在Dan的回答之后发布这个,但我不能) 这里是这个网站的设计工作方式。你只能在现有会员是你的推荐人的情况下注册,所以在“会员”表中你的id和参考者将被存储。在这种格式(id,name,memberid,refid).once你注册,你可以申请参加不同的游戏.bs100049游戏要求你自己购买并注册2个用户。完成后你可以肯定你已经赚了1%。如果你的注册用户都完成了你上面所做的事情(每个人都注册了两个用户),那么百分比从1增加到3,所以 下一个百分比值将是5,依此类推。如果用户购买了bs100049游戏,即使他没有任何注册用户,他也会自动存储在bs100049表中,所以如果他查询他的是什么目前的百分比是1%......

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:0)

这是我的方法。请注意,您应该考虑切换到PDO或mysqli,因为不推荐使用mysql函数。为了这个例子我虽然使用了它们。您还必须确保您的数据确实形成一棵树,否则您将遇到无限循环。

如果可以避免递归尝试。

我假设所引用用户的id存在于名为id的列中的表中。我还假设永远不会有超过两个被引用的用户,并将它们限制在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;
}