本帖最后由 btut2004 于 2014-04-30 11:38:33 编辑

解决方案 »

  1.   

    用你的数据,要求结果贴出来看看,只有3级,LEFT JOIN就行了
      

  2.   

    要求的结果就是这样
    subject                                 id
    中国                                      1
           北京                               8  
                   朝阳区                   7
                   大兴区                   9
           广东                               2 
                   惠州市                   4
                   深圳市                   6
           福建                               5
                   福州市                   11
      

  3.   

    INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('1', '0', '', '婚纱', '0', '0', '3');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('2', '0', '', '汽车美容', '0', '0', '1');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('3', '0', '', '轮胎销售', '0', '0', '1');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('4', '0', '6,7,10,11', '手机', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('5', '0', '8', '笔记本', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('6', '4', '', '苹果', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('7', '4', '', '三星', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('8', '5', '', '联想', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('10', '4', '', '小米', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('11', '4', '', '安卓', '0', '0', '14');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('12', '0', '13', '温泉', '0', '0', '18');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('13', '12', '', '活动', '0', '0', '18');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('14', '0', '15,16', '用品', '0', '0', '18');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('15', '14', '', '泳衣', '0', '0', '18');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('16', '14', '', '泳裤', '0', '0', '18');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('17', '0', '', '婚纱照', '0', '0', '20');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('18', '0', '', '婚纱照', '0', '0', '21');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('19', '0', '', '婚纱照', '0', '0', '22');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('20', '0', '', '风格照欣赏', '0', '0', '25');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('21', '0', '', '风格照欣赏', '0', '0', '25');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('22', '0', '', '风格照欣赏', '0', '0', '25');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('23', '0', '', '风格照片欣赏', '0', '0', '28');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('24', '0', '', '风格照片欣赏', '0', '0', '28');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('25', '0', '', '旅游优惠', '0', '0', '36');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('26', '0', '', '办公家具', '0', '0', '53');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('27', '0', '', '衣柜', '0', '0', '54');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('28', '0', '', '别墅室内装潢', '0', '0', '55');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('29', '0', '', '室内装饰设计', '0', '0', '57');
     INSERT INTO `pre_plugin_dzcms_sj_cptype` VALUES ('30', '0', '', '红木', '0', '0', '60');用上述数据,要求结果是什么
      

  4.   

    老大,结果就是
    subject                                 id
    中国                                      1
           北京                               8  
                   朝阳区                   7
                   大兴区                   9
           广东                               2 
                   惠州市                   4
                   深圳市                   6
           福建                               5
                   福州市                   11
    要两列,一列subject,一列id
      

  5.   

    http://blog.csdn.net/acmain_chm/article/details/4142971
    MySQL中进行树状所有子节点的查询
    在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...
      

  6.   


    老大我提问前已经看过你的blog,我希望知道用left join如何实现。
      

  7.   

    似乎只有1层,LEFT JOIN  ON A.UPID=B.ID
    设置1个字段用来排序,将所有子ID排在主ID下
      

  8.   

    mysql> select * from pre_plugin_dzcms_sj_cptype;
    +----+------+-----------+--------------+--------------+------+-----+
    | id | upid | subid     | subject      | displayorder | lcxs | uid |
    +----+------+-----------+--------------+--------------+------+-----+
    |  1 |    0 |           | 婚纱         |            0 |    0 | 3   |
    |  2 |    0 |           | 汽车美容     |            0 |    0 | 1   |
    |  3 |    0 |           | 轮胎销售     |            0 |    0 | 1   |
    |  4 |    0 | 6,7,10,11 | 手机         |            0 |    0 | 14  |
    |  5 |    0 | 8         | 笔记本       |            0 |    0 | 14  |
    |  6 |    4 |           | 苹果         |            0 |    0 | 14  |
    |  7 |    4 |           | 三星         |            0 |    0 | 14  |
    |  8 |    5 |           | 联想         |            0 |    0 | 14  |
    | 10 |    4 |           | 小米         |            0 |    0 | 14  |
    | 11 |    4 |           | 安卓         |            0 |    0 | 14  |
    | 12 |    0 | 13        | 温泉         |            0 |    0 | 18  |
    | 13 |   12 |           | 活动         |            0 |    0 | 18  |
    | 14 |    0 | 15,16     | 用品         |            0 |    0 | 18  |
    | 15 |   14 |           | 泳衣         |            0 |    0 | 18  |
    | 16 |   14 |           | 泳裤         |            0 |    0 | 18  |
    | 17 |    0 |           | 婚纱照       |            0 |    0 | 20  |
    | 18 |    0 |           | 婚纱照       |            0 |    0 | 21  |
    | 19 |    0 |           | 婚纱照       |            0 |    0 | 22  |
    | 20 |    0 |           | 风格照欣赏   |            0 |    0 | 25  |
    | 21 |    0 |           | 风格照欣赏   |            0 |    0 | 25  |
    | 22 |    0 |           | 风格照欣赏   |            0 |    0 | 25  |
    | 23 |    0 |           | 风格照片欣赏 |            0 |    0 | 28  |
    | 24 |    0 |           | 风格照片欣赏 |            0 |    0 | 28  |
    | 25 |    0 |           | 旅游优惠     |            0 |    0 | 36  |
    | 26 |    0 |           | 办公家具     |            0 |    0 | 53  |
    | 27 |    0 |           | 衣柜         |            0 |    0 | 54  |
    | 28 |    0 |           | 别墅室内装潢 |            0 |    0 | 55  |
    | 29 |    0 |           | 室内装饰设计 |            0 |    0 | 57  |
    | 30 |    0 |           | 红木         |            0 |    0 | 60  |
    +----+------+-----------+--------------+--------------+------+-----+
    29 rows in set (0.00 sec)mysql> select id,subject,null,null,id as o
        -> from pre_plugin_dzcms_sj_cptype
        -> where upid=0
        -> union all
        -> select null,null,b.id,b.subject,a.id
        -> from pre_plugin_dzcms_sj_cptype a inner join pre_plugin_dzcms_sj_cptype b on a.id=b.upid
        -> where a.upid=0
        -> order by o,id is null;
    +------+--------------+------+------+----+
    | id   | subject      | NULL | NULL | o  |
    +------+--------------+------+------+----+
    |    1 | 婚纱         | NULL | NULL |  1 |
    |    2 | 汽车美容     | NULL | NULL |  2 |
    |    3 | 轮胎销售     | NULL | NULL |  3 |
    |    4 | 手机         | NULL | NULL |  4 |
    | NULL | NULL         |    7 | 三星 |  4 |
    | NULL | NULL         |   10 | 小米 |  4 |
    | NULL | NULL         |   11 | 安卓 |  4 |
    | NULL | NULL         |    6 | 苹果 |  4 |
    |    5 | 笔记本       | NULL | NULL |  5 |
    | NULL | NULL         |    8 | 联想 |  5 |
    |   12 | 温泉         | NULL | NULL | 12 |
    | NULL | NULL         |   13 | 活动 | 12 |
    |   14 | 用品         | NULL | NULL | 14 |
    | NULL | NULL         |   15 | 泳衣 | 14 |
    | NULL | NULL         |   16 | 泳裤 | 14 |
    |   17 | 婚纱照       | NULL | NULL | 17 |
    |   18 | 婚纱照       | NULL | NULL | 18 |
    |   19 | 婚纱照       | NULL | NULL | 19 |
    |   20 | 风格照欣赏   | NULL | NULL | 20 |
    |   21 | 风格照欣赏   | NULL | NULL | 21 |
    |   22 | 风格照欣赏   | NULL | NULL | 22 |
    |   23 | 风格照片欣赏 | NULL | NULL | 23 |
    |   24 | 风格照片欣赏 | NULL | NULL | 24 |
    |   25 | 旅游优惠     | NULL | NULL | 25 |
    |   26 | 办公家具     | NULL | NULL | 26 |
    |   27 | 衣柜         | NULL | NULL | 27 |
    |   28 | 别墅室内装潢 | NULL | NULL | 28 |
    |   29 | 室内装饰设计 | NULL | NULL | 29 |
    |   30 | 红木         | NULL | NULL | 30 |
    +------+--------------+------+------+----+
    29 rows in set (0.00 sec)mysql>
      

  9.   


    不是我要的效果,我要的是两列,一列是id,一列是带缩进的subject
      

  10.   

    mysql> select id,subject from (
        ->  select id,subject,id as o,1 as k
        ->  from pre_plugin_dzcms_sj_cptype
        ->  where upid=0
        ->  union all
        ->  select b.id,concat('   ',b.subject),a.id,2 as k
        ->  from pre_plugin_dzcms_sj_cptype a inner join pre_plugin_dzcms_sj_cptype b on a.id=b.upid
        ->  where a.upid=0
        -> ) t
        -> order by o,k;
    +----+--------------+
    | id | subject      |
    +----+--------------+
    |  1 | 婚纱         |
    |  2 | 汽车美容     |
    |  3 | 轮胎销售     |
    |  4 | 手机         |
    |  6 |    苹果      |
    |  7 |    三星      |
    | 10 |    小米      |
    | 11 |    安卓      |
    |  5 | 笔记本       |
    |  8 |    联想      |
    | 12 | 温泉         |
    | 13 |    活动      |
    | 14 | 用品         |
    | 15 |    泳衣      |
    | 16 |    泳裤      |
    | 17 | 婚纱照       |
    | 18 | 婚纱照       |
    | 19 | 婚纱照       |
    | 20 | 风格照欣赏   |
    | 21 | 风格照欣赏   |
    | 22 | 风格照欣赏   |
    | 23 | 风格照片欣赏 |
    | 24 | 风格照片欣赏 |
    | 25 | 旅游优惠     |
    | 26 | 办公家具     |
    | 27 | 衣柜         |
    | 28 | 别墅室内装潢 |
    | 29 | 室内装饰设计 |
    | 30 | 红木         |
    +----+--------------+
    29 rows in set (0.06 sec)mysql>