首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归地或通过迭代从表中检索数据-作为谱系树

递归地或通过迭代从表中检索数据-作为谱系树
EN

Stack Overflow用户
提问于 2012-05-02 01:38:29
回答 2查看 510关注 0票数 0

我在用MySQL从PHP表中检索信息时遇到了一个问题。我在MySQL数据库中有以下表:

id | pigeon_sn | mother_sn | father_sn

id -表示唯一ID;

pigeon_sn -代表鸽圈序列号

mother_sn -代表信鸽的母亲-环序列号

father_sn -代表信鸽环序列号的父亲

我想从数据库中检索信息作为一个血统一样的文件。

这意味着我需要检索信息,如下所示:

我插入一只鸽子戒指的序列号。

  • ,它给了我父母戒指的序列号。然后,对于每个新的序列号(母亲和父亲),
  • 检索与先前获得的序列号相对应的父亲,以及与先前获得的序列号相对应的母亲。
  • 该算法继续进行给定的迭代次数(例如,3将通过其母亲和父亲的序列号来检索3代鸽子)。

我相信这可以递归地完成,或者仅仅通过一个for算法来完成,该算法对给定的迭代次数有效。对于每一只鸽子(鸽子由之前从鸽子获得的序列号表示),算法将创建一个关联数组,其中包含该行表中的所有信息。

谢谢你的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-07 01:38:16

如果有人需要的话,我把它弄好了:

首先,你得到了第一只鸽子和它们的父母:

$pedigree = $this->fetchRow("pigeon_sn='{$sn}'");

代码语言:javascript
复制
             $pedigree[1][] = $this->fetchRow("pigeon\_sn='{$pedigree[0]['SN\_m']}'");
代码语言:javascript
复制
             $pedigree[1][] = $this->fetchRow("pigeon\_sn='{$pedigree[0]['SN\_t']}'");

在那之后你会这样做:

代码语言:javascript
复制
    public function recurseDB($last_level,&$result,$level=1,$limit=2){
        //Check if las level was an array
        if($level <= $limit){
            if(is_array($last_level)){   
                foreach($last_level as $array){
                    $result[$level+1][] = $this->fetchRow("pigeon_SN='{$array['SN_m']}'");
                    $result[$level+1][] = $this->fetchRow("pigeon_SN='{$array['SN_t']}'");
                }
                $this->recurseDB($result[$level+1],$result,$level+1,$limit);
            }
            else
            {
                $result[$level][] = $this->fetchRow("pigeon_SN='{$last_level['SN_m']}'");
                $result[$level][] = $this->fetchRow("pigeon_SN='{$last_level['SN_t']}'");
            }
        }
    } 

用于递归函数。

票数 1
EN

Stack Overflow用户

发布于 2012-05-02 02:44:33

两件事。您需要在同一字段中有一种跟踪父子关系的方法(当您有父代的sn时,查找和引用id的逻辑在将字段对字段的查找与id编号相关联时变得非常复杂,从而产生需要迭代和递归重复该过程的结果),还需要一种构建查询逻辑以使其在数据库上运行的次数最少的方法。

因此,我要考虑做的第一件事是创建一个查找表(pigeon_id、mother_id、father_id)并在id值上创建一个LEFT JOIN,或者在数据库中添加两个字段(mother_id和father_id)并为表创建一个别名,当您构建查询时,在该别名上迭代地JOIN id查找的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10401759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档