mysql 根据父节点id获取父节点和所有子节点 传入id为1 获取数据库中宝鸡市下所有的县镇村用的mysql和mybatis

解决方案 »

  1.   

    或者在编码上想办法,比如类似邮政编码,编码是分级的,518000是518XXX的根节点~~
    分级编码查询效率会高很多,但更新修改复杂。要否采用看你的编码体系是不是稳定,要不要经常变。
      

  2.   

    如果表结构可以改的话可以加一列path用来记录路径,例如西关-/0-1-2,统计1的所有子集的话直接path包含0的就是了
      

  3.   

    DROP FUNCTION IF EXISTS diguihanshu;
    CREATE FUNCTION diguihanshu(areaId INT)
    RETURNS VARCHAR(4000)
    BEGIN
    DECLARE sid VARCHAR(4000);
    DECLARE sidChd VARCHAR(4000);SET sid='$';
    SET sidChd = CAST(areaId AS CHAR);WHILE sidChd IS NOT NULL DO
    SET sid= CONCAT(sid,',',sidChd);
    SELECT GROUP_CONCAT(id) INTO sidChd FROM digui WHERE FIND_IN_SET(pid,sidChd)>0;
    END WHILE;
    RETURN sid;
    END;SELECT * FROM digui WHERE FIND_IN_SET(id,diguihanshu(6));
      

  4.   

    上面是创建一个存储过程。   下面才是查询
    SELECT * FROM digui WHERE FIND_IN_SET(id,diguihanshu(1));