CREATE TABLE `hnsem_area` (
  `ID` int(11) NOT NULL auto_increment,
  `NAME` varchar(64) NOT NULL default 'name' COMMENT '地区名',
  `PARENT_ID` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`),
  KEY `自身关联` (`PARENT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='地区表';我想在这个表中查询每一级的记录 我改怎么做?

解决方案 »

  1.   

    CREATE TABLE `hnsem_area` (
      `ID` int(11) NOT NULL auto_increment,
      `NAME` varchar(64) NOT NULL default 'name' COMMENT '地区名',
      `PARENT_ID` int(11) NOT NULL default '0',
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='地区表';然后用业务流来走自身关联,一般情况下是存储过程,也可以用程序来实现。
      

  2.   

    我不太明白你说得查询每一级的记录是什么意思?
    不过,自身的连接查询应该用改名规则 如
    select name from hnsem_area as a ,hnsem_area as b where a.id=b.parent_id;
      

  3.   

    啊,晕
    你的SQL语句绝对出不来,不想你想象的那么简单,那样的话,得根据实际业务用临时表来实现。
    但是,如果层级固定还好说,一旦不固定,一句sql是绝对实现不了的。
      

  4.   

    你是这个意思吗?
    select ID ,NAME,PARENT_ID from hnsem_area where PARENT_ID in (select ID from hnsem_area group by ID)