2

我无法在我的推荐系统中显示用户。

如果您查看表格,您会注意到userid“29”被refered“28”所取代;和“28”乘“26”;也是“26”乘“10”

当用户会话“29”处于活动状态时,页面应显示在用户上方。希望你明白了。

参考表:

在此处输入图像描述

代码:

<?php
$rs=mysql_query("select userid from referal where refereduserid='29'") or  die(mysql_error());
$exitloopcount=mysql_num_rows($rs);
$last=mysql_fetch_array($rs);
if ($exitloopcount>0) 
{
  for($i=0;$i<$exitloopcount;$i++)
  {
    $rs=mysql_query("select userid from referal where refereduserid='".$last[$i]."'");
    while($data=mysql_fetch_array($rs))
    {
      echo $data[$i];
    } 
  }
}
?>
4

1 回答 1

1

这应该可以通过一个查询(如 Oracle 的CONNECT BY子句)来完成,但我不熟悉 MySQL,所以我为您提供替代解决方案,因为mysql_*有人会告诉您“不要再使用函数”这里。

此解决方案使用MySQLi而不是弃用的mysql_*函数集合。

$stmt=$mysqli->prepare("SELECT `userid` FROM `referal` WHERE `refereduserid`=?");
$stmt->bind_param("i",$id); //here $id=29
$stmt->execute();
$result=$stmt->get_result();
while($row=$result->fetch_assoc())
{
    echo $row["userid"];
    $id=intval($row["userid"]);
    $stmt->bind_param("i",$id);
    $stmt->execute();
    $result=$stmt->get_result();
}

编辑

解释:

MySQLi关于and的一件事PDO是他们支持prepared statement

由于这是一种链式关系(幸好是一对一的关系),我可以简单地准备一个查询:

SELECT `userid` FROM `referal` WHERE `refereduserid`=?

此查询将用于连续获取“推荐人”。

然后我们绑定“initiate” id 29,并执行查询。

找到“引荐来源网址”时,将其回显(如您的代码中所示),然后将其重新绑定到准备好的查询,并执行它以查找其“引荐来源网址”。继续这一步。

在您的问题中使用示例日期:

  1. 绑定:29 -> 执行 -> 获取:28
  2. 绑定:28 -> 执行 -> 获取:26
  3. 绑定:26 -> 执行 -> 获取:10
  4. 绑定:10 -> 执行 -> 没有结果
于 2013-02-27T07:27:55.580 回答