php 实现商品分类
PHP 实现商品分类的方法
数据库设计
商品分类通常采用树形结构存储,常见的数据库表设计如下:
CREATE TABLE `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
`sort_order` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE
);
递归获取分类树
使用递归方法获取完整的分类层级结构:
function getCategoryTree($parentId = null) {
$categories = [];
$query = "SELECT * FROM categories WHERE parent_id " .
($parentId === null ? "IS NULL" : "= " . (int)$parentId) .
" ORDER BY sort_order";
$result = mysqli_query($connection, $query);
while ($row = mysqli_fetch_assoc($result)) {
$row['children'] = getCategoryTree($row['id']);
$categories[] = $row;
}
return $categories;
}
无限级分类展示
前端展示时可以递归输出HTML:
function renderCategoryMenu($categories, $level = 0) {
echo '<ul class="level-' . $level . '">';
foreach ($categories as $category) {
echo '<li>';
echo '<a href="/category/' . $category['id'] . '">' .
htmlspecialchars($category['name']) . '</a>';
if (!empty($category['children'])) {
renderCategoryMenu($category['children'], $level + 1);
}
echo '</li>';
}
echo '</ul>';
}
分类路径查询
获取某个分类的完整路径(面包屑导航):
function getCategoryPath($categoryId) {
$path = [];
while ($categoryId !== null) {
$query = "SELECT id, name, parent_id FROM categories WHERE id = " . (int)$categoryId;
$result = mysqli_query($connection, $query);
$row = mysqli_fetch_assoc($result);
array_unshift($path, $row);
$categoryId = $row['parent_id'];
}
return $path;
}
分类管理操作
添加新分类的示例:
function addCategory($name, $parentId = null) {
$name = mysqli_real_escape_string($connection, $name);
$parentId = $parentId ? (int)$parentId : 'NULL';
$query = "INSERT INTO categories (name, parent_id)
VALUES ('$name', $parentId)";
return mysqli_query($connection, $query);
}
性能优化建议
对于大型分类系统,可以考虑以下优化:
- 使用嵌套集模型(Nested Set)代替邻接表
- 实现缓存机制存储分类树
- 使用预加载技术减少数据库查询
- 为parent_id字段添加索引
前端交互增强
结合JavaScript实现分类的动态操作:

// jQuery示例
$(document).on('click', '.category-item', function() {
$(this).toggleClass('expanded').find('> ul').slideToggle();
});
以上方法提供了完整的商品分类实现方案,可根据实际需求进行调整和扩展。






