2017-09-20 1 views
2

그래서 나는 두 개의 다른 쿼리의 결과를 수집하고 두 쿼리의 결합 된 정보로 JSON 파일을 작성하기 위해 odbc_exec를 사용해야하는 곳을 만들기 위해 웹 애플리케이션을 작성했습니다.(PHP) ODBC 결과 집합을 파기하는 것을 방지하는 방법?

(생략 연결 쿼리) ... 이에

$result = odbc_exec($c, $q); 
$result1 = odbc_exec($c, $q1); 
$resultRows = array(); 
$response = array(); 

while($row = odbc_fetch_array($result)) { 
    $tempResult = $result1; 
    $value = "0"; 
    $other = $row['FIELD']; 
    while($row1 = odbc_fetch_array($tempResult)) { 
     if($row['FIELD'] == $row1 ['FIELD']) { 
      $value = $row1['FIELD']; 
     } 
    } 
    if($value != "0") { 
     $resultRows[] = array('FIELD'=>$value, 'OTHER'=>$other); 
    } 
} 

$response['data'] = $resultRows; 

$fp = fopen('somefile.json', 'w'); 
fwrite($fp, json_encode($response)); 
fclose($fp); 

문제는 그것을 통해 제 1 루프 후 중첩하면서 루프로가 중지 이하이다. 나는 odbc_fetch_array가 각 큰 루프 후에 재설정되는 결과 세트에 대한 참조를 작성하려고 시도한 결과 세트에서 데이터를 제거하지만 여전히 문제점을 해결하지 못한다는 것을 알고 있습니다.

정보가 매우 유용 할 것입니다. 미리 감사드립니다!

+0

결과 집합을 임시 값에 할당하는 방식으로 결과 집합도 지우시겠습니까? –

+0

while 루프 바로 전에 결과 집합의 행 수가 체크 아웃되면 항상 동일한 값을 반환합니다. –

답변

1

$tempResult = $result1; 원본 객체를 참조하여 객체의 전체 복사본, 단지 사본을하지 않기 때문에 나중에 odbc_fetch_array($tempResult)를 호출 할 때 당신이 오직 하나 개의 객체를 의미 odbc_fetch_array($result1)과 같은 일이 정말. 따라서 후속 통화 인 odbc_fetch_array은 두 변수 모두에서 모두 소모됩니다. 매번 clone 개체를 사용할 수 있지만 훨씬 효율적인 방법은 한 번 반복하여 값을 배열에 저장하는 것입니다. 그런 다음 중첩 루프의 배열을 다시 반복 할 수 있습니다.

$result = odbc_exec($c, $q); 
$result1 = odbc_exec($c, $q1); 
$resultRows = array(); 
$response = array(); 

// save this to a regular array for re-use later 
$innerQueryResult = array(); 
while($rowTemp = odbc_fetch_array($result1)) { 
    $innerQueryResult []= $rowTemp; 
} 

while($row = odbc_fetch_array($result)) { 
    $value = "0"; 
    $other = $row['FIELD']; 

    // iterate through the inner query result set 
    foreach ($innerQueryResult as $row1) { 
     if($row['FIELD'] == $row1 ['FIELD']) { 
      $value = $row1['FIELD']; 
     } 
    } 
    if($value != "0") { 
     $resultRows[] = array('FIELD'=>$value, 'OTHER'=>$other); 
    } 
} 

$response['data'] = $resultRows; 

$fp = fopen('somefile.json', 'w'); 
fwrite($fp, json_encode($response)); 
fclose($fp); 
+1

나쁘지 않습니다! Jeff에게 감사드립니다. 나는 또한 설명에 감사드립니다. 이 상황에서 도움이 될뿐만 아니라 다른 비슷한 일을해야한다면 다른 사람들에게도 도움이 될 것입니다. –

관련 문제