+---------------------------+
| ID | PARENT |    NAME     |
+----+--------+-------------+
| 1  | 0      |    祖父     |
+----+--------+-------------+
| 2  | 1      |    父亲     |
+----+--------+-------------+
| 3  | 1      |    叔伯     |
+----+--------+-------------+
| 4  | 2      |    自己     |
+----+--------+-------------+
| 5  | 4      |    儿子     |
+----+--------+-------------+
| 6  | 5      |    孙子     |
+----+--------+-------------+
| 7  | 2      |    姐妹     |
+----+--------+-------------+
| 8  | 3      |    表亲     |
+----+--------+-------------+
| 9  | 7      |    甥儿     |
+----+--------+-------------+
| 10 | 4      |    女儿     |
+----+--------+-------------+
| 11 | 10     |    外孙     |
+----+--------+-------------+
| 12 | 5      |    孙女     |
+----+--------+-------------+
| .. | ...    |    ....     |
+---------------------------+以上为族系表family。1、已知任一ID,求直系上辈族系树,如已知 ID=11, 返回array(
    array(11, 10, 外孙),
    array(10, 4, 女儿),
    array(4, 2, 自己),
    array(2, 1, 父亲)
    array(1, 0, 祖父)
)
2、已知任一ID,求其小辈列表,如已知 ID=4,返回array(
    array(4, 2, 自己),
    array(5, 4, 儿子),
    array(6, 5, 孙子),
    array(12, 5, 孙女),
    array(10, 4, 女儿),
    array(11, 10, 外孙)
)

解决方案 »

  1.   

    求以上两问的SQL语句,请以一句MySQL语句来实现,不能以PHP或其它语言形式实现。请注意,famliy表是无限族系表
    直系上辈还有曾祖、曾曾祖……小辈还有曾孙、曾曾孙……等可能
      

  2.   

    多句SQL也可以,只要结果集能得出正确结果即可。
    上辈直系族系树顺序必须是从长到幼或从幼到长的顺序。
    小辈结果集可以任意顺序。
      

  3.   

    在MYSQL没有现成的语句有这功能。
    可能要自己定义存储过程。这个算法叫做Bill of material算法,网上搜索一下。