首页 > 技术专题 > 关键词  > 解构最新资讯  > 正文

在DedeCms中实现树状结构的两种方法

2007-11-08 11:40 · 稿源:<a href=http://bbs.dedecms.com target=_blank>DEDECMS</a>

代码:

以下为引用的内容:
CREATE TABLE `tree1` ( `id` tinyint(3) unsigned NOT NULL auto_increment, `parentid` tinyint(3) unsigned NOT NULL default '0', `topic` varchar(50) default NULL, PRIMARY KEY (`id`), KEY `parentid` (`parentid`)) TYPE=MyISAM;
INSERT INTO `tree1` (`id`, `parentid`, `topic`) VALUES (1,0,'树1'), (2,0,'树2'), (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则为根记录)topic,记录的显示标题。

显示程序

顺序树:

PHP代码:

以下为引用的内容:
<?/* 数据库连接 */mysql_connect();mysql_select_db('tree');
/* 树状显示的递归函数 */function tree($parentid = 0) { /*执行sql查询,获取记录的标题和id*/ $sql = "select topic,id from tree1 where parentid = $parentid order by id asc"; $rs = mysql_query($sql); /* 缩进*/ echo("<ul>"); while($ra = mysql_fetch_row($rs)) { /* 显示记录标题 */ echo('<li>'.$ra[0].'</li>'); /* 递归调用 */ tree($ra[1]); } echo("</ul>");}tree();?>

逆序树:

PHP代码:

以下为引用的内容:
<?/* 数据库连接 */mysql_connect();mysql_select_db('tree');
/* 树状显示的递归函数 */function tree($parentid = 0) { /*执行sql查询,获取记录的标题和id*/ $sql = "select topic,id from tree1 where parentid = $parentid order by id desc"; $rs = mysql_query($sql); /* 缩进*/ echo("<ul>"); while($ra = mysql_fetch_row($rs)) { /* 显示记录标题 */ echo('<li>'.$ra[0].'</li>'); /* 递归调用 */ tree($ra[1]); } echo("</ul>");}tree();?>

插入数据程序

PHP代码:

<?/* 数据库连接 */mysql_connect();mysql_select_db('tree');$sql = "insert into tree (topic,parentid) values('树3-1',3);";mysql_query($sql);?>

2、排序字段法此方法是通过在数据结构中增加一个标志记录在整个树中的顺序位置的字段来实现的。特点是显示速度和效率高。但在单个树的结构复杂的情况下,数据写入效率有所不足。而且顺序排列时候,插入,删除记录的算法过于复杂,故通常用逆序排列。

数据结构(以mysql为例)

代码:

以下为引用的内容:

CREATE TABLE `tree2` ( `id` tinyint(3) unsigned NOT NULL auto_increment, `parentid` tinyint(3) unsigned NOT NULL default '0', `rootid` tinyint(3) unsigned NOT NULL default '0', `layer` tinyint(3) unsigned NOT NULL default '0', `orders` tinyint(3) unsigned NOT NULL default '0', `topic` varchar(50) default NULL, PRIMARY KEY (`id`), KEY `parentid` (`parentid`), KEY `rootid` (`rootid`)) TYPE=MyISAM

INSERT INTO `tree2` (`id`, `parentid`, `rootid`, `layer`, `orders`, `topic`) VALUES (1,0,1,0,0,'树1'), (2,0,2,0,0,'树2'), (3,0,3,0,0,'树3'), (4,2,2,1,2,'树2-1'), (5,4,2,2,3,'树2-1-1'), (6,2,2,1,1,'树2-2'), (7,1,1,1,4,'树1-1'), (8,1,1,1,2,'树1-2'), (9,1,1,1,1,'树1-3'), (10,8,1,2,3,'树1-2-1'), (11,7,1,2,5,'树1-1-1'), (12,11,1,3,6,'树1-1-1-1');

显示程序

PHP代码:

以下为引用的内容:
<?/* 数据库连接 */mysql_connect();mysql_select_db('tree');
/* 选出所有根记录id */$sql = "select id from tree2 where parentid = 0 order by id desc";$rs = mysql_query($sql);echo("<ul>");$lay = 0;while($ra = mysql_fetch_row($rs)) { echo("<ul>"); /* 选出此树所有记录,并按orders字段排序 */ $sql = "select topic,layer from tree2 where rootid = $ra[0] order by orders"; $rs1 = mysql_query($sql); while($ra1 = mysql_fetch_row($rs1)) { /* 缩进显示 */ if($ra1[1]>$lay) { echo(str_repeat("<ul>",$ra1[1]-$lay)); }elseif($ra1[1]<$lay) { echo(str_repeat("</ul>",$lay-$ra1[1])); } /* 记录显示 */ //echo("$ra1[1]>$lay"); echo("<li>$ra1[0]</li>"); $lay = $ra1[1]; } echo("</ul>");}echo("</ul>");?>

插入数据程序

PHP代码:

以下为引用的内容:

<?/* 数据库连接 */mysql_connect();mysql_select_db('tree');
/* 插入根记录 */$sql = "insert into tree2 (topic) values ('树5')";mysql_query($sql);$sql = "update tree2 set rootid = id where id = ".mysql_insert_id();mysql_query($sql);
/* 插入子记录 */$parentid = 5;//父记录id/* 取出 根记录id,父记录缩进层次,父记录顺序位置 */$sql = "select rootid,layer,orders from tree2 where id = $parentid";list($rootid,$layer,$orders) = mysql_fetch_row(mysql_query($sql));/* 更新插入位置后记录的orders值 */$sql = "update tree2 set orders = orders 1 where orders > $orders";mysql_query($sql);/* 插入记录 */$sql = "insert into tree2 (rootid,parentid,orders,layer,topic) values ($rootid,$parentid,".($orders 1).",".($layer 1).",'树2-1-1-2')";mysql_query($sql);?>

举报

  • 相关推荐
  • 硬盘丢失了数据怎么恢复?硬盘数据恢复的6种方法

    文章分析了硬盘数据丢失的常见原因及恢复方法。数据丢失主要源于人为误操作、硬件故障、软件系统问题和环境因素四类。针对不同情况,介绍了6种恢复方法:回收站还原、系统版本回退、备份还原、Mac系统的TimeMachine、命令行操作以及专业数据恢复软件。其中专业软件如转转大师能深度扫描硬盘,支持多种文件格式恢复,操作简便且成功率高。文章强调数据丢失后应避免写入操作,根据实际情况选择合适恢复方式,并建议做好日常备份预防数据丢失。

  • 小米YU7内置超级小爱:有两种唤醒方式

    小米汽车官微介绍,小米YU7的超级小爱支持两种免唤醒方式,无需单独说出 小爱同学”唤醒词,直接说出相关指令即可执行,具体如下。 昵称免唤醒: 指令前/后加上小爱”,如小爱打开座椅通风”、导航回家小爱”,任意功能均可使用,灵活适配各种操控需求。 指令免唤醒: 车控/导航/音乐等高频指令直接说即可执行,如打开空调”、导航去公司”等,覆盖日常行车中�

  • 男子为通便将15cm火腿肠塞入下体 医生:不可、应以预防为主

    很多网友看完新闻后表示,再也无法直视火腿肠了! 媒体报道,近日,陕西一58岁男子因为不爱吃蔬果,便秘了十几天,出现腹胀、腹痛。 为了缓解不适,男子便突发奇想,便使用火腿肠通便,没想到这根长达15厘米的火腿肠滑入肛门直肠内,无法自行取出来。

  • 秘塔AI也终于悄悄上线了DeepResearch。

    测试完以后,我觉得这玩意,还是值得我将近通宵写一篇的。 深度研究,也就是DeepResearch。 我过去写过很多次秘塔AI了,因为我自己的搜索习惯,现在基本就是,大活上ChatGPT用DeepResearch,常识问答直接找豆包,一般的AI搜索就是秘塔AI。 当然很多ChatBot产品都有AI搜索,但是我自己这两年,还是习惯用秘塔AI和Perplexity这样形态的原生AI搜索产品了,这可能就是习惯的力量吧。

  • 女子洗车9天方向盘长出3cm霉菌 网友:不忍直视

    ​日前,重庆的何女士遭遇了一件糟心事。她洗完车后,便将爱车停放在车库,本以为只是寻常的一次停车,没想到 9 天后再次打开车门,眼前的场景让她惊得合不拢嘴。 从现场画面能看到,车内仿佛成了霉菌的“温床”,金黄色的霉菌肆意生长,布满了各个角落,那令人作呕的模样,仿佛隔着屏幕都能让人闻到那股潮湿腐败的刺鼻味道。尤其是方向盘,成了霉菌的“重灾区

  • 暑期青少年扎堆整容 专家提醒:生理结构尚未发育成熟

    ​正值暑期,医美整形市场迎来新一轮热潮,然而,这股热潮中却出现了令人担忧的低龄化趋势。据多家媒体报道,近年来,越来越多的准高中生甚至更小的青少年加入到整容行列中,前来咨询的求美者年龄越来越小,最小的仅有 11 岁,这一现象引发了社会各界的广泛关注。 专家指出,未成年人生理结构尚未发育成熟,审美观也处于形成阶段,容易受到

  • IEC冰箱保鲜认证多苛刻?仅一家通过,中家院给予认证

    7月10日,海尔冰箱成为首批通过IEC国际保鲜标准认证的产品,填补了全球冰箱行业保鲜效果评估标准的空白。该标准由海尔主导制定,要求冰箱失重率不超过10g/24h,海尔产品实测失重率仅3%,远超标准。核心技术在于阻氧干湿分储科技:湿区采用HCS生态植物膜技术,将湿度稳定在90%左右;干区通过磁控全空间保鲜科技,实现肉类10天保鲜如初。这是中国品牌首次主导制定的冰箱国际标准,已被30多国采用,为消费者选购提供明确依据,推动行业技术升级。

  • 中家院发布首批IEC冰箱保鲜新标认证名单,除了海尔冰箱,还有谁?

    中国发布首个冰箱保鲜国际标准认证,海尔等品牌通过测试。新标准通过"食材失重率≤10g/24h"和"总凝露得分≤5分"两项量化指标评估保鲜性能,终结了行业概念混战。海尔研发的HCS生态膜技术能自动调节湿度,实现"保湿不凝露"。该标准由中国企业主导制定,已被30多国采用,标志着中国从标准追随者成为制定者。消费者选购冰箱时终于可以用数据说话,不再被模糊概念困扰。

  • 当 CODING 宣布其 DevOps 产品停服计划时,国内软件研发工具行业的平静被彻底打破

    腾讯旗下CODING DevOps平台将于2024年9月起逐步停服,极狐GitLab迅速推出专属迁移福利争夺用户。其优惠政策包括:首年订阅超低折扣(SaaS团队版300元/人)、免费代码仓库迁移服务、社区版用户专属折扣及3个月企业版试用权益。此举直击用户迁移痛点,降低经济门槛和操作风险。极狐凭借"中外合作3.0"模式在中国市场快速崛起,已与沃尔玛、理想汽车等企业建立成功合作案例。这场用户争夺战将加速国内研发工具行业洗牌,推动平台提升智能化服务和生态建设,最终使开发者获得更高效的工具选择。

  • 明略科技研究成果被ACM MM 2025接收,攻克个性化注视点预测难题

    明略科技与北京大学、吉林大学合作研发的PRE-MAP模型被ACM MM2025接收。该研究针对现有视觉注意力模型在个性化注视点预测中的局限性,提出新方法PRE-MAP和大规模多模态数据集SPA-ADV,能更好捕捉个体差异并提升高分辨率视频中的多属性注视点预测精度。该成果是明略科技在AI大模型应用领域的又一突破,此前其超图多模态大模型(HMLLM)曾获ACM MM2024最佳论文提名。研究团队通过4500名不同背景用户的真实视觉行为数据,结合多模态大模型技术,实现了"某类人会看哪里"的精准预测,为广告创意优化和投放效果评估提供科学依据。