Codeigniter 无递归无限分类方法(2)
之前发贴,很多人都觉得我写的太简单了。没有说明。这里最近无聊,看帖子,发现是写的不够具体,代码不能直接调用,很多新手看起来会很困难。这里重新发帖,稍微详细的说明以下:数据库表:
id
layer //层
orders //层内的排序
parent //父id,这个分类隶属于谁
name //分类名称。
models部分:
function channels($id){
$this->db->order_by("layer", "asc"); //分类所在的层,比如总分类是0的话,那么它的下级分类就是1,1的下级分类就是2。
$this->db->order_by("orders", "asc"); //orders 排序,这里对分类,不是必须的。可以没有,但是分类后终归要把你的分类进行排序的。
$data = $this->db->get('你的表名'); //这里不多解释了。
foreach($data->result_array() as $row) {
if($row['parent'] == $id) {//这里说明一下,这里的$id是定义父id的。如果你要调用某个分类下面的所有分类,那么$id就应该等于这个分类的id。
$result[$row['id']] = $row;
$index[$row['id']] =& $result[$row['id']];
}else {
$index[$row['parent']][$row['id']] = $row;
$index[$row['id']] =& $index[$row['parent']][$row['id']];
}
}
return $result;
}
Controller部分:
function index()
{
$this->load->model('models'); //调用你的models类。上面的models部分,你写在那个models里,你就调用那个文件
$data=$this->models->channels('id'); //如果是0则调用所有的数据,否则id应该等于你要调用分类的id,函数会列出你要调用分类的下面所有的分类。
echo "<pre>";
print_r($data);//看看和你的数据是不是一样的。
echo "</pre>";
}
这种分类方式,如果把一切不需要的东西,都去掉。最多只需要3个字段,就可以完成无递归分类。简单可靠。
输出的数据是一个多维数组,你可以把它导入到你的views中,在里面进行处理。
数组操作不熟悉的,可以看php手册。数组部分。 补充一下。你的主分类数据应该是这样形式的:
id layer orders parent name
自动生成 0 1 0 总分类1
自动生成 0 2 0 总分类2
自动生成 1 1 1 总分类1的二级分类(这里假定总分类1的id为1) 学习了。。。。 这个加到一定的问题 就会出错 ,在分类的过程中不能有半点错误 !所以不是很好的 万能分类! 递归的话 mysql 的检索效率很低的不如试试 aa_bb_cc_dd这个方式设计数据库
这个样检索的话 用like 就可以检索出 每个指定节点的所有成员比你那个效率高多了 id(layer_orders_parent) name
0_1_0 总分类1
0_2_0 总分类2
1_1_1 总分类1的二级分类 zzyn 发表于 2011-4-1 16:42 static/image/common/back.gif
递归的话 mysql 的检索效率很低的不如试试 aa_bb_cc_dd这个方式设计数据库
这个样检索的话 用like 就可以 ...
都说是无递归了。。。 008shanke 发表于 2011-3-28 14:53 static/image/common/back.gif
这个加到一定的问题 就会出错 ,在分类的过程中不能有半点错误 !所以不是很好的 万能分类! ...
没遇到过错误,如果出错,请问什么环节容易出错? zzyn 发表于 2011-4-1 16:49 static/image/common/back.gif
id(layer_orders_parent) name
0_1_0 总分类1
0 ...
几个问题,
1、写再一个表里,虽然是减少了读取mysql的次数,减少2次。但也相应的增加了php的运算。
2、获取特定分类的下属分类,变得非常麻烦。我读取1大分类的下属分类,直接调用大分类等于1的所有数据就够了。而你这个,我估计要麻烦许多。
3、修改分类归属时,我只修改一个字段,不需要做任何处理。你这个需要php先进行处理再写入。
有的时候物极必反。看上去简单的,可能是最复杂的。 成功PRINT显示了一个多维数组的分类
但,我如何在VIEW视图来foreach出这些数据啊....求解,万分感谢
页:
[1]
2