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>