2

紹介システムでユーザーを表示するのに問題があります。

表を見ると、'29 userid' がrefered'28' であることがわかります。「28」×「26」。また、「10」によって「26」

ユーザー セッション '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

これは1つのクエリ(Oracleの句など)で実行できるはずですが、MySQLに精通していないため、誰かから「関数CONNECT BYを使用しない」と言われるので、別のソリューションを提供します。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とについての1つのことは、それらがプリペアドステートメントPDOをサポートしているということです。

これは連鎖関係(そしてありがたいことに1対1)であるため、1つのクエリを簡単に準備できます。

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

このクエリは、「リファラー」を継続的にフェッチするために使用されます。

次に、「開始」IDをバインドし29、クエリを実行します。

「リファラー」が見つかったら、それをエコーアウトし(コードに示されているように)、準備されたクエリに再バインドし、実行して「リファラー」を見つけます。この手順を続けます。

質問でサンプル日付を使用する:

  1. バインド:29->実行->取得:28
  2. バインド:28->実行->取得:26
  3. バインド:26->実行->取得:10
  4. バインド:10->実行->結果なし
于 2013-02-27T07:27:55.580 に答える