#
# Table structure for table 'ta'
#CREATE TABLE ta (
  ID tinyint(3) unsigned NOT NULL auto_increment,
  P_ID tinyint(3) unsigned default NULL,
  NAME char(3) default NULL,
  PRIMARY KEY  (ID),
  KEY P_ID (P_ID)
) TYPE=MyISAM;#
# Dumping data for table 'ta'
#INSERT INTO ta VALUES("1", NULL, "A");
INSERT INTO ta VALUES("2", NULL, "B");
INSERT INTO ta VALUES("3", NULL, "C");
INSERT INTO ta VALUES("4", NULL, "D");
INSERT INTO ta VALUES("5", NULL, "E");
INSERT INTO ta VALUES("6", NULL, "F");
INSERT INTO ta VALUES("7", "1", "AA");
INSERT INTO ta VALUES("8", "1", "AB");
INSERT INTO ta VALUES("9", "1", "AC");
INSERT INTO ta VALUES("10", "2", "BA");
INSERT INTO ta VALUES("11", "2", "BB");
INSERT INTO ta VALUES("12", "2", "BC");
mysql> SELECT * FROM `ta`;
+----+------+------+
| ID | P_ID | NAME |
+----+------+------+
|  1 | NULL | A    |
|  2 | NULL | B    |
|  3 | NULL | C    |
|  4 | NULL | D    |
|  5 | NULL | E    |
|  6 | NULL | F    |
|  7 |    1 | AA   |
|  8 |    1 | AB   |
|  9 |    1 | AC   |
| 10 |    2 | BA   |
| 11 |    2 | BB   |
| 12 |    2 | BC   |
+----+------+------+
12 rows in set (0.00 sec)mysql> SELECT * FROM ta A LEFT JOIN ta B ON A.ID = B.P_ID WHERE B.ID IS NOT NULL
;
+----+------+------+------+------+------+
| ID | P_ID | NAME | ID   | P_ID | NAME |
+----+------+------+------+------+------+
|  1 | NULL | A    |    7 |    1 | AA   |
|  1 | NULL | A    |    8 |    1 | AB   |
|  1 | NULL | A    |    9 |    1 | AC   |
|  2 | NULL | B    |   10 |    2 | BA   |
|  2 | NULL | B    |   11 |    2 | BB   |
|  2 | NULL | B    |   12 |    2 | BC   |
+----+------+------+------+------+------+
6 rows in set (0.00 sec)mysql>

解决方案 »

  1.   

    非数据库方法 :将数据全部读出来放到一个vector里面
    然后递归出来形成树!
      

  2.   

    shuixin13(犬犬(心帆)) 
    的方法只能列出一级的 - - 
    而我的目录有N级.(也就是还有记录会隶属于AA,AB,AC...,下面还有记录)我的目录结构是这样+----+------+------+
    | ID | P_ID | NAME |
    +----+------+------+
    |  1 |    0 | A    |
    |  2 |    0 | B    |
    |  3 |    1 | AA   |
    |  4 |    1 | AB   |
    |  5 |    2 | AC   |
    |  6 |    5 | BA   |
    |  7 |    5 | BB   |
    |  8 |    7 | BC   |
    |  9 |    8 | kkk  |
    | 10 |    9 | lll  |
    | 11 |   10 | mmm  |
    | 12 |   10 | nnn  |
    +----+------+------+简单是这样, P_ID=0即是根目录
    现在随便给一个ID,比如 7   ,要求算出隶属于该ID以下的记录条数,(全部.有关系的都计算,不仅仅只是计算下面一级的..)
      

  3.   

    如果只计算一级我直接
    select * from table where p_id = xx  不就可以了?何必这么辛苦咧.要 where p_id=xx  然后  列出的记录下的记录也计算在内的..
      

  4.   

    shuixin13(犬犬(心帆)) 祝你和MM幸福,快乐..
    帮我解决一下问题
    我天天给你们烧高香....拜托了  :~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<
      

  5.   

    嘻嘻,只能用递归了呀,如果你能确定你的树有几层,
    那就用几个 LEFT JOIN 吧:)