本帖最后由 microcoy 于 2013-08-29 17:01:40 编辑

解决方案 »

  1.   

    我的数据好几十万条,全部贴上吗,光SQL文件都上百兆,我只要方法呀!
      

  2.   

    其中自己的memberid也可以作为别人的...爷奶父母兄弟姐妹子女孙子孙女...编号,不知道你说的是否是这个意思,补充一下!
      

  3.   

    sql文件链接地址,请下载
    http://pan.baidu.com/share/link?shareid=1911135749&uk=2500727874
      

  4.   

    select fatherid, motherid, group_concat(monkeyid) as child from arp_individual group by concat(fatherid, motherid) order by fatherid, motherid
    最好在 monkeyid、fatherid、motherid 上建索引
    while($row = mysql_fetch_assoc($rs)) {
    //  $data[$row['fatherid']][] = $row; //按 fatherid 聚类
      $data[$row['motherid']][] = $row; //按 motherid 聚类
    }$len = count($data); //为防止死循环而设
    while($data && $len--) {
      $key = key($data);
      $res[$key] = array_shift($data);
      genealogy($res[$key], $data);
    }function genealogy(&$items, &$data, $deep=0) {
      foreach($items as &$item) {
        $item['child'] = explode(',', $item['child']);
        $item['deep'] = $deep;
        foreach($item['child'] as $i=>$monkeyid) {
          if(isset($data[$monkeyid])) {
            $item['child'][$monkeyid] = $data[$monkeyid];
            unset($item['child'][$i]);
            unset($data[$monkeyid]);
            genealogy($item['child'][$monkeyid], $data, $deep+1);
          }
        }
      }
    }
    print_r($res);