数据库里有个张member表,字段...中有 paretner....(记录其他member的ID)...我想找出所有paretner不为空的...
比如a 的paretner记录b的ID...b中paretner记录c的ID..
现在想写函数...任意ID传进来...返回一个数组....(里面记录着该ID所有的paretner)....
问题可能不好理解....再画图..
a->b->c->d(这个是关系依靠paretner记录ID)
...
就是说a的父亲是b..b的父亲是c...c的父亲是d......一直走下去...直...n(n 没有父亲,即paretner没有记录)
如果...我传c的ID进来...就返回数组([0]=>'c_id(c的id)',[1]=>'d_id(d的ID)')....这样子....
不知道..哪位高人能解.......请快快现身.....我现在都没有分发贴了...

解决方案 »

  1.   

    我还是没看懂,是传入一个id,返回这个id下面所有的枝叶吗?
      

  2.   

    mysql> CREATE FUNCTION getParentLst(Id INT)
        ->  RETURNS VARCHAR(1000)
        -> BEGIN
        ->   DECLARE sTemp VARCHAR(1000);
        ->   DECLARE sTempP VARCHAR(1000);
        ->
        ->   SET sTemp = cast(Id as CHAR);
        ->   SET sTempP =sTemp;
        ->
        ->   WHILE sTempChd is not null DO
        ->     SELECT paretner INTO sTempP FROM table where id = sTempP;
        ->     SET sTemp = concat(sTemp,',',sTempP);
        ->   END WHILE;
        ->   RETURN sTemp;
        ->
        -> END;
      

  3.   


    要用php怎样写函数数....呐..
      

  4.   

     function _get_layer_coutn($uid)
     {
      $parent_id =array();
      $model_member =& m('member');
        $parent_result = $model_member->find(array(
        'conditions' => 'user_id = \''.$uid.'\'',
        'fields' => 'this.parent'
        ));
            if (is_array($parent_result)&&count($parent_result)) 
        {
           foreach($parent_result as $key=>$value){
    //       echo $key.":".$value;
    foreach ($value as $key=>$val){
    if($val){
    $parent_id[]=$val;
    }
    if($val&&strpos($key,'p')!==false){
    //暂停...
    // echo $val;
    }
           }
        }
        }
        print_r($parent_id);
           
            return $parent_id;
     
     }这个是我写的,,,可是只能执行一次...得一组数据...郁..
      

  5.   


    function getParentTree($uid) {
        $parent_id = array();
        $model_member =& m('member');
        $parent_result = $model_member->find(array(
      'conditions' => 'user_id = \''.$uid.'\'',
      'fields' => 'this.parent'
      ));
      if (is_array($parent_result)&&count($parent_result)) {
          foreach($parent_result as $key=>$value){
              foreach ($value as $key2=>$val){
                  if($val){
                      $parent_id = array_merge($v,getParentTree($val));
                  }
              }
          }
      }
      return $parent_id;
    }楼主你是罪人。。我把页面关了才敲的代码太萌了
    试试吧,把你写的改了改。
      

  6.   


    function _get_layer_coutn($uid)
    {
    static $parent_id =array();
    $model_member =& m('member');
    $parent_result = $model_member->find(array(
    'conditions' => 'user_id = \''.$uid.'\'',
    'fields' => 'this.parent'
    ));
      if (is_array($parent_result)&&count($parent_result)) 
    {
    foreach($parent_result as $key=>$value){
    foreach ($value as $key=>$val){
    if($val){
    $parent_id[]=$val;
    _get_layer_coutn($val);
    }else{
    print_r($parent_id);
    }
    }
    }
    }}
      

  7.   

    一激动都打错了。
    array_merge($v,getParentTree($val));
    应该是
    array_merge($val,getParentTree($val));
      

  8.   

    我得出这样的结果....
    Array ( [0] => 300 [1] => Array ( [0] => 25 [1] => Array ( [0] => 10 [1] => Array ( ) ) ) ) 
    ............
    我想要
    Array([0]=>300
          [1]=25
          [3]=>10);
    不知道..要怎么弄呢...
      

  9.   

    不好意思,错了两次。。实在是头像太萌了。
    $parent_id = array_merge(array($v),getParentTree($val));
      

  10.   

    function getParentList($uid) { 
    $parent_id = array($uid); 
    $model_member =& m('member'); 
    $parent_result = $model_member->find(array( 'conditions' => 'user_id = \''.$uid.'\'',  'fields' => 'this.parent'  )); 
    while ($parent_result) { 
    $temp = $parent_result->member->parent;
    $parent_id[] = $temp;
    $parent_result = $model_member->find(array( 'conditions' => 'user_id = \''.$temp.'\'',  'fields' => 'this.parent'  )); 

    return implode(',',$parent_id); 
    }