無制限の分類を達成するためのPHP + MySQLの

 


PHP + MySQLの無制限の分類を達成するために
、<前>
上記のIDがpidパス名

1台のコンピュータ00

2携帯電話00

3ノート10-1

この30-1-3 4スーパー

このゲーム0-1-3 5. 3
</ PRE>


このように、我々はコンピュータ、唯一のSQL文の下に分類のすべての子孫を照会するとします。

<PRE>
選択ID、等カテゴリパスから名前(選択連結(パス、 ' - '、ID = 1のカテゴリから、ID、 '%')パス)。
</ PRE>


長所:簡単なクエリ、効率的な、パスフィールドをインデックス化することができます。

短所:更新ノード関係のトラブルは、すべての若い世代のパスフィールドを更新する必要があります。

 

プログラムのサンプルコード:

<前>
<?phpの

$アドレスが使わ=配列(

アレイ( 'ID' => 1、 '名前' => '中国'、 'PID' => 0)、

アレイ( 'ID' => 2、 '名称' => '河南'、 'PID' => 1)、

アレイ( 'ID' => 3、 '名称' => '鄭州'、 'PID' => 2)、

アレイ( 'ID' => 4、 '名称' => '洛陽'、 'PID' => 2)、

アレイ( 'ID' => 5、 '名称' => '安養' 'PID' => 2)、

アレイ( 'ID' => 6、 '名称' => '林州'、 'PID' => 5)、

アレイ( 'ID' => 7、 '名称' => '安養郡'、 'PID' => 5)、

アレイ( 'ID' => 8、 '名称' => '内黄'、 'PID' => 5)、

アレイ( 'ID' => 9、 '名称' => 'HuaXian'、 'PID' => 5)、

アレイ( 'ID' => 10、 '名称' => 'Jiaoxiang'、 'PID' => 6)、

アレイ( 'ID' => 11、 '名称' => '湖南'、 'PID' => 1)、

アレイ( 'ID' => 12、 '名称' => '长沙'、 'PID' => 11)、

アレイ( 'ID' => 13、 '名称' => '湘潭'、 'PID' => 11)、

アレイ( 'ID' => 14、 '名称' => 'Yuelu'、 'PID' => 12)、

);

//クエリサブツリー(再帰的な方法)

関数get_childs($ ID)

{

グローバル$のアドレスが使われます。

$ RET =配列();

foreachの($ addrの&として$アドレスが使われる)//効率を向上させるために、本明細書中に&演算子を使用

{

もし($ addrの[ 'pidを'] == $ ID)

{

$ ADDR [ '子供'] = get_childs($ ADDR [ 'ID']);

右$ [] = $ addrは、

}

}

$右を返します。

}

//テストコード

エコー '<前>';

ますprint_r(get_childs(1))。

エコー '<時間/>';

しますprint_r($アドレスが使われます)。
</ PRE>

おすすめ

転載: www.cnblogs.com/newmiracle/p/11856260.html