解决方案 »

  1.   

    不知道你的sql能得到什么样的结果
      

  2.   

    不好意思,图有点错,应该只有两个0-1-4栏目才是同级,现在通过“ select id pid concat(pid,"-",id) as bb,name order by pid bb ”语句得出上图结果,现在想在界面弄个能够控制同级栏目排序的功能,请问有什么思路可解?
      

  3.   

    不好意思,语句有误 更正select id pid concat(pid,"-",id) as bb,name order by bb 没有"pid"啊
      

  4.   


    图中每条后面是排序数字,可以对同级栏目进行排序(如红框中),只不过这是递归调用;现在想换上面12楼图中的库设计(此种就是没有排序的好思路其他功能都可),实现如上同样的排序功能,问如何才能实现,有没有好的方法??是我表述不清吗。。库中pid是本身栏目的父id;每个栏目pth为其父栏目的pth加上本身栏目id;(顶级是pid=0,pth为0加上本身id )
      

  5.   

    借用隔壁mysql版主的话:不要相信你的中文表达能力和我的中文理解能力
    贴出数据库建表语句,数据插入语句,以及你想得到的结果
      

  6.   


    表结构数据和最终结果就是上图呀,其中左图结果就是通过 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组后就能排序?反复试过就是不行特来此拜求
      

  7.   

    我大概理解了。
    但我觉得这种结构本身不太灵活。
    分类的话,最好是每一层里面有只属于同类之间的排序,子类不受这个影响。
    但既然已经是这个结构了,那可不可以这样来实现?
    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
      

  8.   

    order by path 不行吗?
      

  9.   

    再述一下啊,总觉得不详细:
    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楼中结果,问题来了,想给结果加个同级栏目排序;不知如何控制
      

  10.   

    select id pid concat(pth,"-",id) as bb,name from table order by bb
    不好意思我sql弄混了,这个应该是最早那个图的;下面图应该是这个得出的结果select * from table order by pth
      

  11.   

    最有效的办法,是组成一个多维数组,然后用JS控制,JS插件如ztree以及一些专门的拖拽排序插件就可以解决首先order by 排序字段 asc然后不管是递归,还是引用传值,得到一个能表达父子关系的多维数组不用递归,引用传值有解决方案$items = array(
        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);