php递归查询不会,,求教。就是一个三级分类传个ID找到他的上级,还有父级。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php递归查询不会,,求教。就是一个三级分类传个ID找到他的上级,还有父级。。相关的知识,希望对你有一定的参考价值。
要是能写成一个函数就最好了,我用thinkphp的。。谢啦
这种类型的数据,一般数据库中,一张表会有存在两个字段,一个是它本身id,另一个是它的父级parent_id。既然要找到它的祖父级,sql语句这样写:
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id)
$sql = "select parent_id from ecs_table1 where id=" . $id;
return($GLOBALS['db']->getone($sql ));
递归,就是根据现有的id,重复取。
上面get_parent_id只是获取父id,当然,你可以写一个直接获取祖父id的函数。
不过,现在大部分php网站,都只会有获取父类的函数,想discuz,ecshop等。获取祖父id,就是不断的获取该id的父id。 参考技术A
给你一个函数吧。这个不是递归的。效率比递归的强,而且支持无限极分类
直接将 M(表名)->select()的数据传进去就可以。
附一个表结构
CREATE TABLE `zhibo_article_category` (`cat_id` smallint(5) NOT NULL AUTO_INCREMENT,
`cat_name` varchar(255) NOT NULL DEFAULT '',
`parent_id` smallint(5) NOT NULL DEFAULT '0' COMMENT '父id',
PRIMARY KEY (`cat_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;/**
* 把返回的数据集转换成Tree
* @param array $list 要转换的数据集
* @param string $pid parent标记字段
* @param string $level level标记字段
* @return array
*/
function list_to_tree($list, $root = 0, $pk='cat_id', $pid = 'parent_id', $child = 'child')
// 创建Tree
$tree = array();
if(is_array($list))
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data)
$refer[$data[$pk]] =& $list[$key];
foreach ($list as $key => $data)
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId)
$tree[] =& $list[$key];
else
if (isset($refer[$parentId]))
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
return $tree;
以上是关于php递归查询不会,,求教。就是一个三级分类传个ID找到他的上级,还有父级。。的主要内容,如果未能解决你的问题,请参考以下文章
PHP.32-TP框架商城应用实例-后台10-商品分类-需求分析创建无限级商品分类,递归