이전 부품 번호 가격을 업데이트해야하는 자동 시작 번호가있는 데이터베이스가 있습니다. 각 행에는 부품 번호 (필드 이름 "마스터")와 대체 된 (최신) 부품 번호 (필드 이름 "pnc")가있는 필드가 있습니다. 스크립트는 "pnc"필드가 비어 있지 않은지 확인해야합니다. 그것이 아니라면, 그 번호에 대한 가격을 붙잡아 야합니다. 충분히 쉬워.재귀 함수는 아무 것도 반환하지 않습니다.
그러나 일부 부품 번호는 가장 최근의 부품 번호 및 가격에 도달 할 때까지 통과 할 알 수없는 번호가 있습니다. 그래서 재귀 함수가 최상의 솔루션이라고 생각했습니다. 그러나 올바르게 작동하지 않습니다. 여기 코드는 : 무슨 일
public function updatePricing()
{
//method to update pricing by referencing supersession prices
$sql = "SELECT * FROM prices";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
for($i=0;$i<2000;$i++) //using 2000 for testing, use $num_rows after
{
$row = mysql_fetch_array($result);
$id = $row['id'];
$super_num = $row['pnc'];
//if there is a supersession in this row find original
if(!empty($super_num))
{
$final_super_price = $this->findSuperPrice($super_num);
echo "partnum: " . $row['master'];
echo " ";
echo "price: " . $final_super_price . "<br /><br />";
}
}
}
public function findSuperPrice($part_num)
{
$sql = "SELECT * FROM prices WHERE master='" . $part_num . "'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if (empty($row['pnc'])) //if there aren't any supersession numbers
{
$final_price = $row['list'];
return $final_price;
}
else //recursively call itself until we find the last number
{
$this->findSuperPrice($row['pnc']);
}
}
그것이 "PNC"필드에 항목이 행을 찾을 때까지 updatePricing() 함수가 실행됩니다. 그럴 때 findSuperPrice() 함수가 호출됩니다. findSuperPrice() 함수는 "pnc"필드가 비어있을 때까지 재귀 적으로 실행되어야합니다. 그럴 경우 숫자가 반환됩니다.
그러나 실제로 findSuperPrice()에서 if 문의 else 부분에 도달하면 아무 것도 반환하지 않습니다. 기본적으로 깊이가 한 단계 이상인 경우. 나는 어떤 에러도 내지 않고있다. 그것은 단지 빈 문장을 반환하는 것이다. 거기에 정보가 돌아 왔음을 확인했습니다. 감사.
더 큰 클래스의 내부에 있음을 언급해야합니다. 나머지 수업은이 두 가지 방법에 영향을 미치지 않습니다.
대신에'do {} while()'루프를 사용해보십시오. DB 구조가 재귀적일 때, 실제 재귀 호출을 사용하여 트리를 처리 할 필요가 없습니다. –