我在用MySQL从PHP表中检索信息时遇到了一个问题。我在MySQL数据库中有以下表:
id | pigeon_sn | mother_sn | father_sn
id -表示唯一ID;
pigeon_sn -代表鸽圈序列号
mother_sn -代表信鸽的母亲-环序列号
father_sn -代表信鸽环序列号的父亲
我想从数据库中检索信息作为一个血统一样的文件。
这意味着我需要检索信息,如下所示:
我插入一只鸽子戒指的序列号。
,
我相信这可以递归地完成,或者仅仅通过一个for算法来完成,该算法对给定的迭代次数有效。对于每一只鸽子(鸽子由之前从鸽子获得的序列号表示),算法将创建一个关联数组,其中包含该行表中的所有信息。
谢谢你的建议。
发布于 2012-05-07 01:38:16
如果有人需要的话,我把它弄好了:
首先,你得到了第一只鸽子和它们的父母:
$pedigree = $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-02 02:44:33
两件事。您需要在同一字段中有一种跟踪父子关系的方法(当您有父代的sn时,查找和引用id的逻辑在将字段对字段的查找与id编号相关联时变得非常复杂,从而产生需要迭代和递归重复该过程的结果),还需要一种构建查询逻辑以使其在数据库上运行的次数最少的方法。
因此,我要考虑做的第一件事是创建一个查找表(pigeon_id、mother_id、father_id)并在id值上创建一个LEFT JOIN,或者在数据库中添加两个字段(mother_id和father_id)并为表创建一个别名,当您构建查询时,在该别名上迭代地JOIN id查找的值。
https://stackoverflow.com/questions/10401759
复制相似问题