php从数据库查询结果生成树形列表的方法,查询结果树形_PHP教程
php从数据库查询结果生成树形列表的方法,查询结果树形
本文实例讲述了php从数据库查询结果生成树形列表的方法。分享给大家供大家参考。具体分析如下:
本代码可以从数据库读取数据生成一个类似于windows的资源管理器的树形列表
<?php /* Here are the database definitions (for Solid) that i use in this code. * It should not be hard to adapt it to another database. */ /* CREATE TABLE dirent_types ( id INTEGER NOT NULL, icon VARCHAR(50), name VARCHAR(50), PRIMARY KEY(id) ); INSERT INTO dirent_types VALUES(1, 'folderclosed', 'Directory'); INSERT INTO dirent_types VALUES(2, 'document', 'File'); CREATE TABLE directory ( id INTEGER NOT NULL, parent INTEGER REFERENCES directory(id), name VARCHAR(200), icon VARCHAR(50), type INTEGER REFERENCES dirent_types(id), url VARCHAR(200), PRIMARY KEY(id) ); DROP INDEX directory_idx; CREATE UNIQUE INDEX directory_idx ON directory(parent, name); CREATE SEQUENCE dirent_id; "CREATE PROCEDURE insert_dir_entry (name VARCHAR, parent INTEGER, type INTEGER) RETURNS(id INTEGER) BEGIN EXEC SQL WHENEVER SQLERROR ABORT; EXEC SEQUENCE dirent_id.NEXT INTO id; EXEC SQL PREPARE c_insert INSERT INTO directory (id, parent, type, name) VALUES(?, ?, ?, ?); EXEC SQL EXECUTE c_insert USING (id, parent, type, name); EXEC SQL DROP c_insert; END"; CALL insert_dir_entry('My Computer', NULL, 1); CALL insert_dir_entry('Network Neighbourhood', NULL, 1); CALL insert_dir_entry('lucifer.guardian.no', 2, 1); CALL insert_dir_entry('rafael.guardian.no', 2, 1); CALL insert_dir_entry('uriel.guardian.no', 2, 1); CALL insert_dir_entry('Control Panel', NULL, 1); CALL insert_dir_entry('Services', 6, 1); CALL insert_dir_entry('Apache', 7, 2); CALL insert_dir_entry('Solid Server 2.2', 7, 2); */ function icon($icon, $name = '', $width = 0, $height = 0) { global $DOCUMENT_ROOT; $icon_loc = '/pics/menu'; $file = "$DOCUMENT_ROOT$icon_loc/$icon.gif"; if (!$width || !$height) { $iconinfo = getimagesize($file); if (!$width) { $width = $iconinfo[0]; } if (!$height) { $height = $iconinfo[1]; } } printf( '<img src="/static/imghw/default1.png" data-src="/pics/menu/%s.gif" class="lazy" %s border=0 align=top '. ' style="max-width:90%" height="%d">', $name ? " name=\"$name\"" : '', $icon, $width, $height); } function display_directory($parent,$showdepth=0,$ancestors=false){ global $child_nodes, $node_data, $last_child; reset($child_nodes[$parent]); $size = sizeof($child_nodes[$parent]); $lastindex = $size - 1; if (!$ancestors) { $ancestors = array(); } $depth = sizeof($ancestors); printf( '<div id="node_%d" class="dirEntry" visibility="%s">', $parent, $showdepth > 0 ? 'show' : 'hide'); while (list($index, $node) = each($child_nodes[$parent])) { for ($i = 0; $i < $depth; $i++) { $up_parent = (int)$node_data[$ancestors[$i]][ 'parent']; $last_node_on_generation = $last_child[$up_parent]; $uptree_node_on_generation = $ancestors[$i]; if ($last_node_on_generation == $uptree_node_on_generation) { icon( "blank"); } else { icon( "line"); } } if ($child_nodes[$node]) { // has children, i.e. it is a folder $conn_icon = "plus"; $expand = true; } else { $conn_icon = "join"; $expand = false; } if ($index == $lastindex) { $conn_icon .= "bottom"; } elseif ($depth == 0 && $index == 0) { $conn_icon .= "top"; } if ($expand) { printf( "<a href=\"javascript:document.layers['node_%d'].visibility='show'\">", $node); } icon($conn_icon, "connImg_$node"); if ($expand) { print( "</a>"); } $icon = $node_data[$node][ 'icon']; if (!$icon) { $type = $node_data[$node][ 'type']; $icon = $GLOBALS[ 'dirent_icons'][$type]; } icon($icon, "nodeImg_$node"); $name = $node_data[$node][ 'name']; printf( '?<font size="%d">%s</font><br%c>', -1, $name, 10); if ($child_nodes[$node]) { $newdepth = $showdepth; if ($newdepth > 0) { $newdepth--; } $new_ancestors = $ancestors; $new_ancestors[] = $node; display_directory($node, $newdepth, $new_ancestors); } } print( "</div\n>"); } function setup_directory($parent, $maxdepth) { global $dirent_icons, $child_nodes, $node_data, $last_child; $dirent_icons = sql_assoc('SELECT id,icon FROM dirent_types'); $query = 'SELECT id,parent,type,icon,name '. 'FROM directory '. 'ORDER BY parent,name'; $child_nodes = array(); $node_data = array(); $res = sql($query); while (list($id,$parent,$type,$icon,$name)=db_fetch_row($res)){ $child_nodes[(int)$parent][] = $id; $node_data[$id] = array( 'id' => $id, 'parent' => $parent, 'type' => $type, 'icon' => $icon, 'name' => $name); $last_child[(int)$parent] = $id; } } ?>
希望本文所述对大家的php程序设计有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。

使用 Navicat Premium 创建数据库:连接到数据库服务器并输入连接参数。右键单击服务器并选择“创建数据库”。输入新数据库的名称和指定字符集和排序规则。连接到新数据库并在“对象浏览器”中创建表。右键单击表并选择“插入数据”来插入数据。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

在 Navicat 中执行 SQL 的步骤:连接到数据库。创建 SQL 编辑器窗口。编写 SQL 查询或脚本。单击“运行”按钮执行查询或脚本。查看结果(如果执行查询的话)。

可在 Navicat 中通过以下步骤新建 MySQL 连接:打开应用程序并选择“新建连接”(Ctrl N)。选择“MySQL”作为连接类型。输入主机名/IP 地址、端口、用户名和密码。(可选)配置高级选项。保存连接并输入连接名称。

Navicat 无法连接数据库的常见原因及其解决方法:1. 检查服务器运行状态;2. 核对连接信息;3. 调整防火墙设置;4. 配置远程访问;5. 排除网络问题;6. 检查权限;7. 保障版本兼容性;8. 排除其他可能性。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

不同数据库系统添加列的语法为:mysql:alter table table_name add column_name data_type; postgresql:alter table table_name添加column_name data_type; oracle; oracle:alter table table_name add(column_name data_type)
