2016-09-26 7 views
1

UserID1にリンクされている可能性のあるすべてのユーザーを取得できますか?例えば参照されたすべてのユーザーを単一のクエリで取得しますか?

USERID1はUserID2とUserID5

UserID2が

UserID3がUSERID1のページ

結果UserID4

呼ばUserID3

呼ば呼ば

  • + UserID2
  • + UserID5
  • ++ UserID3
  • +++ UserID4
  • 私は現在、それをやっている方法

$user_data['id']=1; 
$primary_referral_query=mysqli_query($conn, "SELECT username FROM users WHERE referrer=$user_data[id]"); 
while($primary_referral=mysqli_fetch_array($primary_referral_query)) 
{ 
    echo '+'.$primary_referral['username'].'<br>'; 
} 
$secondary_referral_query=mysqli_query($conn, "SELECT a.username, b.username, c.username AS users_c_username FROM users AS a, users AS b, users AS c WHERE b.referrer = a.id AND a.id <> b.id AND c.referrer = b.id AND a.id=$user_data[id]"); 
while($secondary_referral=mysqli_fetch_array($secondary_referral_query)) 
{ 
    echo '++'.$secondary_referral['users_c_username'].'<br>'; 
} 
+0

あなたのコードからの結果は何ですか? – bitWorking

+0

[この質問](http://stackoverflow.com/q/20215744/5459839)を見てください。特定のレコードにリンクされたすべての子孫レコードを階層テーブルに取得する方法に関するアイデアには、いくつかの異なる答えがあります。 – trincot

+0

@bitWorking私のコードの結果は、(私はそのループを行っていないので、 '+++ UserID4'を除いて)私の質問でどのように示したのですか? – Draven

答えて

0

保存のあなたの方法階層データは隣接リスト(モデル)と呼ばれます。

は、さまざまなオプションがあります:

1)データベースからすべてのデータを読み込みPHPの配列に入れて再帰的にトラバースを

例:https://stackoverflow.com/a/15307555/1948627

2)現在のユーザーのみと子孫を選択

:、PHPの配列に入れて再帰的に

それを通過するSQLは次のようになります。

PHPコードのサンプルが見つかりませんでしたが、受信するデータが冗長になっているため、さらに難しくなります。注意:ツリーの新しい深さごとに、DB選択に1つのJOINを追加する必要があります。

3)再帰PHP/MySQLの

例:https://stackoverflow.com/a/10994181/1948627

あなたは多くのデータを持っていない場合、私はオプション1で行くだろう。または、データを格納または取得する別の方法を選択することをお勧めします。

私のお気に入りの方法は、ネストされたセットについてのもう一つの興味深い意見Closure Tables

です:https://stackoverflow.com/a/31642680/1948627

関連する問題