如何在推荐系统中显示上述推荐?

时间:2013-02-27 06:49:18

标签: php mysql referrals

我在推荐系统中向用户显示时遇到问题。

如果你看表​​,你会注意到userid'29'是refered乘'28'; 和'28'乘'26'; 也是'26'乘'10'

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

推荐表:

enter image description here

代码:

<?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];
    } 
  }
}
?>

1 个答案:

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

修改

说明:

关于MySQLiPDO的一件事是他们支持prepared statement

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

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

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

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

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

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

  1. bind:29 - &gt;执行 - &gt;得到:28
  2. bind:28 - &gt;执行 - &gt;得到:26
  3. bind:26 - &gt;执行 - &gt;得到:10
  4. bind:10 - &gt;执行 - &gt;没结果