PHP递归写入MySQL实现无限级分类数据操作示例
PHP递归写入MySQL实现无限级分类数据操作示例是一种常见的数据操作方法,适用于需要对分类数据进行层级化管理的场景。本攻略将介绍如何使用PHP递归写入MySQL实现无限级分类数据操作的完整过程。
1. 创建MySQL数据库和数据表
首先需要创建一个MySQL数据库和两个数据表,一个用于存储分类信息,一个用于存储每个分类的子分类信息。
-- 创建数据库
CREATE DATABASE `category`;
-- 使用数据库
USE `category`;
-- 创建主分类表
CREATE TABLE `category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`name` varchar(50) NOT NULL COMMENT '分类名称',
`parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级分类ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分类表';
-- 创建子分类表
CREATE TABLE `subcategory` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '子分类ID',
`name` varchar(50) NOT NULL COMMENT '子分类名称',
`parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父级分类ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='子分类表';
2. 编写PHP递归函数
接下来需要编写一个PHP递归函数,用于实现向MySQL中插入无限级分类数据的功能。以下是PHP递归函数的完整代码:
/**
* 添加分类数据(递归写入MySQL实现无限级分类数据)
* @param $db 数据库连接对象
* @param $data 分类数据
* @param $parent_id 父级分类ID
* @param $level 分类层级
*/
function add_category($db, $data, $parent_id = 0, $level = 0) {
foreach ($data as $key => $value) {
if ($value['parent_id'] == $parent_id) {
// 插入分类记录
$sql = "INSERT INTO category(name, parent_id) VALUES('{$value['name']}', {$parent_id})";
$db->query($sql);
$category_id = $db->lastInsertId();
// 插入子分类记录
add_category($db, $data, $category_id, $level + 1);
}
}
}
3. 执行PHP递归函数
最后需要执行PHP递归函数,将分类数据插入到MySQL数据表中。
// 访问MySQL数据库
try {
$db = new PDO('mysql:host=localhost;dbname=category', 'root', '123456');
} catch (PDOException $e) {
echo '数据库连接失败:' . $e->getMessage();
}
// 分类数据
$data = array(
array('name' => '电子产品', 'parent_id' => 0),
array('name' => '手机', 'parent_id' => 1),
array('name' => '小米手机', 'parent_id' => 2),
array('name' => '华为手机', 'parent_id' => 2),
array('name' => '平板电脑', 'parent_id' => 1),
array('name' => '电脑', 'parent_id' => 1),
array('name' => '笔记本电脑', 'parent_id' => 6),
array('name' => '台式电脑', 'parent_id' => 6),
);
// 插入分类数据
add_category($db, $data);
以上代码将向MySQL数据表中插入一组分类数据,包括一级分类、二级分类和三级分类。执行代码后,可以在MySQL数据表中查看分类数据的层级关系。
示例说明
以下是两个示例说明,分别展示了如何使用PHP递归函数实现无限级分类数据操作。
示例一:使用PHP递归函数生成分类列表
/**
* 获取分类数据(递归读取MySQL实现无限级分类数据)
* @param $db 数据库连接对象
* @param $parent_id 父级分类ID
* @param $level 分类层级
*/
function get_category($db, $parent_id = 0, $level = 0) {
$result = array();
// 查询分类记录
$sql = "SELECT id, name FROM category WHERE parent_id={$parent_id}";
$stmt = $db->query($sql);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 处理子分类记录
foreach ($rows as $row) {
$row['level'] = $level;
$result[] = $row;
// 查询子分类记录
$sub_category = get_category($db, $row['id'], $level + 1);
$result = array_merge($result, $sub_category);
}
return $result;
}
以上代码实现了一个函数get_category,用于获取MySQL数据表中的分类数据,并生成一个分类列表。该函数使用PHP递归算法,逐层遍历分类数据,在遍历过程中生成分类列表,最后将生成的分类列表作为函数的返回值。
示例二:使用PHP递归函数删除分类数据
/**
* 删除分类数据(递归删除MySQL中的无限级分类数据)
* @param $db 数据库连接对象
* @param $category_id 分类ID
*/
function delete_category($db, $category_id) {
// 查询子分类记录
$sql = "SELECT id FROM category WHERE parent_id={$category_id}";
$stmt = $db->query($sql);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 删除子分类记录
foreach ($rows as $row) {
delete_category($db, $row['id']);
}
// 删除分类记录
$sql = "DELETE FROM category WHERE id={$category_id}";
$db->query($sql);
}
以上代码实现了一个函数delete_category,用于删除MySQL数据表中的分类数据。该函数使用PHP递归算法,逐层遍历分类数据,在遍历过程中逐级删除分类数据,最后将整个分类数据删除。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP递归写入MySQL实现无限级分类数据操作示例 - Python技术站