2

MLMのチームメンバーの階層を一覧表示するテーブルがあります。PHPで結果を出力できるように、MySQLで最も効率的にテーブルをクエリする方法を見つけようとしています。

研究で、ネストされたクエリまたはPHPwhileループ内のネストされたクエリは理想的ではないことを学びましたが、MySQL結合を見ると、情報に正しくアクセスする方法がわかりません。

テーブル値(テーブル名はMLM):

ID  Upline   FName

1     1      Joe    (he is at the top of the hierarchy)
2     1      Jane   (Jane is directly under Joe)
3     2      Jack
4     3      Jill

ジョーの下で報告しているこれらすべての人々の名前を見つけるために?

Select FName from MLM where Upline = 1;
and
Select FName from MLM where Upline in (Select FName from MLM where Upline = 1);
and
Select FName from MLM where Upline in (Select FName from MLM where Upline in (Select FName from MLM where Upline = 1));

これを開始するのは良くありません。また、Joeの下にいくつのレベルがあるかわからないため、スケーラブルではありません。

mysql_fetch_arrayこの情報をクエリする方法、またはPHPをwhileループで組み合わせてすべての値を見つけてエコーする方法を教えてください。

4

2 に答える 2

1

一般的には知られていませんが、テーブル自体を結合できます。必要に応じてインスタンスを参照できるように、各インスタンスに個別のエイリアスを指定する必要があります。

次のクエリは、ジョーと同じアップラインを持つすべての人を取得します。

SELECT m2.* FROM MLM m1
JOIN MLM m2 ON m1.Upline = m2.Upline
WHERE m1.FName LIKE "Joe"

ジョー自身ではなく、ジョーに報告する人々だけが必要な場合は、次のようにすることができます。

SELECT m2.* FROM MLM m1
JOIN MLM m2 ON m1.Upline = m2.Upline
WHERE m1.FName LIKE "Joe"
AND m1.FName <> m2.FName
于 2012-10-02T03:53:48.280 に答える
0

データベースで階層データを表現するのは難しいです。あなたは次のいずれかについて考えることができます:-

  1. 階層を簡単に識別できるようにテーブルを再設計します-サブクエリ階層の制限と問題をよりよく理解するには、このリンクを確認してくださいMySQLでの階層データの管理 または
  2. 表から*を選択し、phpコードで結果を反復処理して階層を作成します。

これ以外に、サブクエリでサブクエリを実行すると、実用的な解決策に近づくことはできません。

于 2012-10-02T05:01:49.400 に答える