0

私はアフィリエイトシステムを構築していて、データベースのデザインを1つの部分に積み重ねています。誰が誰を採用したかを追跡する方法がわかりません。このようなものがあるとしましょう:

  • ジョン・スミス
    • アレックスデル
      • ジムウェスト
      • マルコポーロ
      • ジョニーブラボー
    • ピットサンプラス
      • サラマット
      • ガブリエラホワイト
      • アントニオサント
    • Maja Grozdanova
      • Agon Xheladini

1.JonはAlexを採用し、AlexはJim、Marko、Johnyを採用しました。2.ジョンはピットを募集し、ピットはサラ、ガブリエラ、アントニオを募集しました。3.ジョンはマヤを募集し、マヤはアゴンを募集しました。アゴンは誰かのエルを募集することができ、誰かのエルを募集することができます。これは無限の深さです。

誰かがこの問題を解決する方法を知っていますか?テーブルをデザインする方法は?

4

3 に答える 3

2

IDとrecruitedbyidを使用して、自己参照テーブルを使用するだけです。

ID名RecruitedBy
1 Jon Smith null
2アレックスデル1
3マルコポロ1
..。

使用しているデータベースについては言及していませんが、SQL Server 2008には、これらの状況に適した階層データ型、hierarchyidがあります。

于 2010-07-30T07:42:49.053 に答える
1
  • あなたが扱う「エンティティ」の1つのテーブル(人、企業)
  • 関係を決定する1つのテーブル「EntityRelation」

それで、アレックス・デルは彼が彼を雇ったジョンスミスと関係があります。これはかなり標準的なCRMアプローチです。

于 2010-07-30T07:42:22.263 に答える
1

2つの列を作成します。

  • int userId:データベースでサポートされている場合はPRIMARYKEYおよびAUTO_INCREMENT。各ユーザーには一意の番号が割り当てられます。
  • intreferrer :これは現在のユーザーを紹介した人のuserIdですユーザーが他のユーザーのアフィリエイトでない場合は、0またはNULLに設定できます。

樹形図は、数行のコードで簡単に作成できます。

編集:あなたが尋ねたので、ここに樹形図のいくつかのコードがあります。MySQLクエリは実装が簡単であるため、PHPを選択しましたが、この概念はJava、C、Ruby、Pythonなどで簡単に実行できます。

function listUsers($handler, $id, $prefix) {

    // Please use MySQLi extension with prepared statements or your code
    // becomes SQL injection paradise
    $results = mysql_query("SELECT `user`, `referrer` FROM `users` WHERE `referrer` = $id");

    while ($row = mysql_fetch_row($results) {
        echo $prefix . $row[0];
        listUsers($handler, $$row[1], $prefix . "* ");
    }
}


$handler = mysql_connect(. . .);
listUsers($handler, 0, "")

正しく実装されたときにロジックが機能すると80%確信しています。戻るはずです:

/*
Jon smith
* Alex Del
* * Jim West
* * Marko Polo
* * Johny Bravo
* Pit Sampras
* * Sara Mat
* * Gabriella white
* * Antonio Santo
* Maja Grozdanova
* * Agon Xheladini
*/
于 2010-07-30T07:47:53.940 に答える