ツリー構造を実装する2つの方法
1.再帰的メソッド
再帰とは、関数がそれ自体を明示的に呼び出すことです。
再帰的手法を用いてツリー構造を実現する場合の特徴として、データの書き込み速度は速くなりますが、表示速度は遅くなります(特にツリーの分岐数やレベルが多い場合に顕著です)。書き込むデータ量が多く、ツリー構造が複雑な場合に適しています。
データ構造 (mysql を例にします)
コード: - - - - - - - - - - - - - - - - - - - - - - - - --------------------------------
テーブル `tree1` を作成します (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL デフォルト '0'、
`topic` varchar(50) デフォルト NULL,
主キー (`id`)、
KEY `parentid` (`parentid`)
) TYPE=MyISAM;
`tree1` (`id`、`parentid`、`topic`) の値に挿入します
(1,0,'ツリー 1'),
(2,0,'tree2'),
(3,0,'ツリー 3')、
(4,2,'ツリー 2-1')、
(5,4,'ツリー 2-1-1')、
(6,2,'ツリー 2-2')、
(7,1,'ツリー 1-1')、
(8,1,'ツリー 1-2'),
(9,1,'ツリー 1-3'),
(10,8,'ツリー 1-2-1')、
(11,7,'ツリー 1-1-1'),
(12,11,'ツリー 1-1-1-1');
-------------------------------------------------- ----------------------------------
フィールドの説明
id、記録されたID番号
parentid、レコードの親レコードID (0の場合、ルートレコードです)
トピック、レコードの表示タイトル
番組番組
シーケンスツリー:
PHP コード:---------------------------------------------- ----------------------------------
/* データベース接続 */
mysql_connect();
mysql_select_db('ツリー');
/* 再帰関数をツリー形式で表示 */
関数ツリー($parentid = 0) {
/* SQL クエリを実行してレコードのタイトルと ID を取得します*/
$sql = "tree1 からトピック、id を選択します。ここで、parentid = $parentid は ID asc 順に並べられます";
$rs = mysql_query($sql);
/* インデント*/
echo("