我一直在努力解决这个问题两天,但我仍然无法提出解决方案。我目前正在设计一个网站,用户可以通过其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%......
答案 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;
}