0

PHP を使用して MySQL テーブルから情報を取得する際に問題が発生しています。MySQL データベースに次のテーブルがあります

。pigeon_sn | 母のsn | Father_sn

id - 一意の ID を表します。
pigeon_sn - 鳩の輪のシリアル番号
を表します Mother_sn - 鳩の母親を表します - 輪のシリアル番号
を表します Father_sn - 鳩の父を表します - 輪のシリアル番号

データベースから情報を血統のようなファイルとして取得したいと思います。
つまり、次のように情報を取得する必要があります

。鳩の指輪のシリアル番号を挿入します。
- マザーリングとファーザーリングのシリアルナンバーを教えてくれます。
- 次に、新しいシリアル番号 (母と父) ごとに、以前に取得したシリアル番号に対応する父と、以前のシリアル番号に対応する母を取得します。
- アルゴリズムは、指定された回数だけ繰り返されます (たとえば、3 は、母親と父親のシリアル番号によって 3 世代のハトを取得します)。

これは、再帰的に、または特定の反復回数の for アルゴリズムによってのみ実行できると信じています。すべての鳩 (鳩は以前に鳩から取得したシリアル番号で表されます) に対して、アルゴリズムはその行テーブルのすべての情報を含む連想配列を作成します。

アドバイスありがとうございます。

4

2 に答える 2

1

誰かがそれを必要とするなら、これはうまくいきました:

最初にあなたは最初の鳩とその親を手に入れます:

$ pedigree [0] = $ this-> fetchRow( "pigeon_sn ='{$ sn}'");

$ pedigree [1] [] = $ this-> fetchRow( "pigeon_sn ='{$ pedigree [0] ['SN_m']}'");

$ pedigree [1] [] = $ this-> fetchRow( "pigeon_sn ='{$ pedigree [0] ['SN_t']}'");

その後、次のようになります。

    public function recurseDB($last_level,&$result,$level=1,$limit=2){
        //Check if las level was an array
        if($level <= $limit){
            if(is_array($last_level)){   
                foreach($last_level as $array){
                    $result[$level+1][] = $this->fetchRow("pigeon_SN='{$array['SN_m']}'");
                    $result[$level+1][] = $this->fetchRow("pigeon_SN='{$array['SN_t']}'");
                }
                $this->recurseDB($result[$level+1],$result,$level+1,$limit);
            }
            else
            {
                $result[$level][] = $this->fetchRow("pigeon_SN='{$last_level['SN_m']}'");
                $result[$level][] = $this->fetchRow("pigeon_SN='{$last_level['SN_t']}'");
            }
        }
    } 



再帰関数のために。

于 2012-05-06T17:38:16.173 に答える
0

2つのこと。親子関係を追跡する方法の両方が必要です(親のsnがある場合、フィールド間のルックアップをID番号に関連付けて必要な結果を生成するときに、IDをルックアップおよび参照するロジックは高速に複雑になります同じフィールドでプロセスを繰り返し再帰的に繰り返す)、およびクエリロジックを構築してデータベースで最小回数実行されるようにする方法。

したがって、最初に検討するのは、ルックアップテーブル(pigeon_id、mother_id、father_id)を作成LEFT JOINしてid値にを作成するか、dbに2つのフィールド(mother_idとfather_id)を追加してテーブルのエイリアスを作成することです。クエリを作成するときJOINに、IDルックアップの値を繰り返し使用します。

于 2012-05-01T18:44:33.153 に答える