0

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

id | pigeon_sn | 妈妈_sn | Father_sn

id - 表示唯一 ID;
pigeon_sn - 代表鸽环序列号
Mother_sn - 代表鸽子的母亲 - 环序列号
Father_sn - 代表鸽子的父亲 - 环序列号

我想从数据库中检索信息作为谱系文件。
这意味着我需要按如下方式检索信息:

我插入鸽子戒指的序列号。
- 它给了我母亲和父亲戒指的序列号。
- 然后,对于每个新的序列号(母亲和父亲),检索与之前获得的序列号对应的父亲,以及与之前获得的序列号对应的母亲。
- 算法进行给定次数的迭代(例如 3 将通过他们的父母序列号检索 3 代鸽子)。

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

谢谢你的建议。

4

2 回答 2

1

如果有人需要的话,可以解决这个问题:

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

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

$pedigree[1][] = $this->fetchRow("pigeon_sn='{$pedigree[0]['SN_m']}'");

$pedigree[1][] = $this->fetchRow("pigeon_sn='{$pedigree[0]['SN_t']}'");

之后你会这样:

    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']}'");
            }
        }
    } 



对于递归函数。

于 2012-05-06T17:38:16.173 回答
0

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

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

于 2012-05-01T18:44:33.153 回答