function?getlow($topid){
$array=array();
$result=mysql_query('SELECT?*?FROM?+user+?WHERE?+topid+?=?'.$topid);
if(mysql_num_rows($result)?0){
while($a?=?mysql_fetch_array($result,MYSQL_ASSOC)){
$b=getlow($a['id']);
if(count($b)?0){
$array[$a['id']]=$b;
}else{
$array[$a['id']]=$a['id'];
}
return$array;
测试无误
根据上面的图mysql中建立表和插入数据
CREATE TABLE ?+product_categories+ (
表结构如下:
下面是PHP的实例代码:
①.、获取所有节点
php
$pdo = new PDO(
'mysql:host=localhost;dbname=test',
'root',
''
);
$stmt = $pdo-prepare("SELECT c.name FROM product_categories as c, product_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='电子产品' ORDER BY c.left_node");$stmt-execute();
$rs=$stmt-fetchAll(PDO::FETCH_ASSOC);
foreach($rs as $v){
echo $v['name'].'br /';
输出:
电子产品
家用电器
电视机
电冰箱
空调
数码产品
电脑
台式电脑
笔记本电脑
平板电脑
$stmt = $pdo-prepare("SELECT c.name FROM product_categories as c, product_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='数码产品' ORDER BY c.left_node");$stmt-execute();
$stmt = $pdo-prepare("SELECT name FROM product_categories where right_node-left_node=1");$stmt-execute();
输出:
$stmt = $pdo-prepare("SELECT p.name FROM product_categories AS c, product_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node AND c.name = '平板电脑' ORDER BY p.left_node");$stmt-execute();
$stmt = $pdo-prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM product_categories AS c, product_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node GROUP BY c.name ORDER BY c.left_node");$stmt-execute();
var_dump($rs);
echo 'br /';
echo $v['name'].' level:'.$v['level'].'br /';}
电子产品 level:0
家用电器 level:1
$stmt = $pdo-prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM product_categories AS c, product_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node and c.name='平板电脑' GROUP BY c.name ORDER BY c.left_node");$stmt-execute();
function addNode($left_node,$new_node){
global $pdo;
$stmt = $pdo-prepare("SELECT right_node FROM product_categories WHERE name = '$left_node'");$stmt-execute();
$rs=$stmt-fetch(PDO::FETCH_ASSOC);
$right_node=$rs['right_node'];
addNode('家用电器','办公用品');
完成之后表结构如下:
function deleteNode($node_name){
$stmt = $pdo-prepare("SELECT left_node,right_node, right_node - left_node + 1 as width FROM product_categories WHERE name ='$node_name'");$stmt-execute();
$left_node=$rs['left_node'];
$width=$rs['width'];
$pdo-exec("DELETE FROM product_categories WHERE left_node BETWEEN $left_node AND $right_node");$pdo-exec("UPDATE product_categories SET right_node = right_node - $width WHERE right_node $right_node");$pdo-exec("UPDATE product_categories SET left_node = left_node - $width WHERE left_node $right_node");}
deleteNode('数码产品');
可以看到用多叉树的方式构建无限分类,查询的时候是非常简便的.但是在插入新的节点和删除节点时就比较麻烦了.
以上就是土嘎嘎小编为大家整理的php无限树状分类查找字段相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!