表结构数据和最终结果就是上图呀,其中左图结果就是通过 select id pid concat(pth,"-",id) as bb,name order by bb 得出,库中pid是本身栏目的父id;每个栏目pth为其父栏目的pth加上本身栏目id;(顶级是pid=0,pth为0加上本身id );想加个同级排序不知用何方法,比如在name后加个order来实现排序,或知有什么高级点sql语句能够让pth和pid组后就能排序?反复试过就是不行特来此拜求
再述一下啊,总觉得不详细: 1、一上来库中为空的时候就是加添加顶级栏目A,pid=0,pth=0,sql语句加进库中;2、加A的子栏目AAA的时候就是点A的链接传过来A的id做为AAA的pid,然后再构造AAA的pth=A的pth加上"-"再加上AAA的新的id;然后入库;以此类推所有栏目入库; 3、现通过select id pid concat(pth,"-",id) as bb,name from table order by bb 得出图20楼中结果,问题来了,想给结果加个同级栏目排序;不知如何控制
select id pid concat(pth,"-",id) as bb,name from table order by bb 不好意思我sql弄混了,这个应该是最早那个图的;下面图应该是这个得出的结果select * from table order by pth
图中每条后面是排序数字,可以对同级栏目进行排序(如红框中),只不过这是递归调用;现在想换上面12楼图中的库设计(此种就是没有排序的好思路其他功能都可),实现如上同样的排序功能,问如何才能实现,有没有好的方法??是我表述不清吗。。库中pid是本身栏目的父id;每个栏目pth为其父栏目的pth加上本身栏目id;(顶级是pid=0,pth为0加上本身id )
贴出数据库建表语句,数据插入语句,以及你想得到的结果
表结构数据和最终结果就是上图呀,其中左图结果就是通过 select id pid concat(pth,"-",id) as bb,name order by bb 得出,库中pid是本身栏目的父id;每个栏目pth为其父栏目的pth加上本身栏目id;(顶级是pid=0,pth为0加上本身id );想加个同级排序不知用何方法,比如在name后加个order来实现排序,或知有什么高级点sql语句能够让pth和pid组后就能排序?反复试过就是不行特来此拜求
但我觉得这种结构本身不太灵活。
分类的话,最好是每一层里面有只属于同类之间的排序,子类不受这个影响。
但既然已经是这个结构了,那可不可以这样来实现?
1-3
1-3-1
1-3-2
1-3-2-1
1-4
---------------
1-a
1-a-1
1-a-2
1-a-2-1
1-3
-----------------
1-4
1-4-1
1-4-2
1-4-2-1
1-3
1、一上来库中为空的时候就是加添加顶级栏目A,pid=0,pth=0,sql语句加进库中;2、加A的子栏目AAA的时候就是点A的链接传过来A的id做为AAA的pid,然后再构造AAA的pth=A的pth加上"-"再加上AAA的新的id;然后入库;以此类推所有栏目入库;
3、现通过select id pid concat(pth,"-",id) as bb,name from table order by bb
得出图20楼中结果,问题来了,想给结果加个同级栏目排序;不知如何控制
不好意思我sql弄混了,这个应该是最早那个图的;下面图应该是这个得出的结果select * from table order by pth
1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),
4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),
5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
);$tree = array(); //格式化好的树
foreach ($items as $item){
if (isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
print_r($tree);