我在推荐系统中向用户显示时遇到问题。
如果你看表,你会注意到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];
}
}
}
?>
答案 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();
}
修改强>:
说明:
关于MySQLi
和PDO
的一件事是他们支持prepared statement。
由于这是一个链式关系(幸好一对一),我可以简单地准备一个查询:
SELECT `userid` FROM `referal` WHERE `refereduserid`=?
此查询将用于连续获取“推荐人”。
然后我们绑定“initiate”id 29
,然后执行查询。
当找到“引用者”时,将其回显(如代码中所示),然后将其重新绑定到准备好的查询,并执行它以找到其“引用者”。继续这一步。
在您的问题中使用示例日期: