2011-01-09 4 views
6

큰 데이터베이스에서 가져온 결과 집합이 있습니다.PHP에서 mysql 결과 세트를 재사용 할 수 있습니까?

$result = mysql_query($sql); 

이 레코드 집합을 반복하여 특정 비트의 데이터를 가져오고 while($row = mysql_fetch_array($result))을 사용하여 평균을 구합니다. 나중에 페이지에서이 동일한 레코드 세트를 다시 반복하여 모든 것을 출력하려고합니다. 그러나 이전에 레코드 세트를 사용했기 때문에 두 번째 루프는 아무 것도 반환하지 않습니다.

두 번째 동일한 레코드 세트 ($result2 = mysql_query($sql);)를 반복하면서이 문제를 마침내 해킹했지만 동일한 SQL 호출을 두 번 반복하는 것을 싫어합니다. 어떤 방식 으로든 동일한 데이터 세트를 여러 번 반복 할 수 있습니까?

+0

쿼리를 하나로 병합 할 수 있습니까? 이 쿼리는 무엇입니까? – CrazyMax

+0

배열의 모든 행을 저장하지 않고 원하는 곳에서 사용하는 이유는 무엇입니까? – zerkms

+0

그것도 해킹 일지 모르지만 이것을 시도 할 수 있습니다 : "$ result1 = $ result = mysql_query ($ sql)". –

답변

20

사용을 얻을 수 Cursors SQL을 사용하여 : 이미 버퍼링 이후

mysql_data_seek($result, 0); 

당신이 "무료"얻는다.

별도의 메모로 mysql_unbuffered_query으로 명시 적으로 버퍼링되지 않은 쿼리를 수행 할 수 있습니다.

+0

매트, 이것은 매력처럼 일했습니다! 불필요한로드 시간을 많이 절약 해 주셨습니다. – MarathonStudios

+0

@Col, 왜 그가 ** 이미 버퍼링 된 ** 배열에 복사해야합니까? 투표를 거절하면 답변에 문제가있을 것입니다. "대신 불필요한 복사 작업을 할 수 있습니다."자격이 없습니다. –

+0

@Col, 당신은 많은 가정을하고 있습니다. 처음에 모든 것을 배열에 복사하고 있다는 것을 어떻게 알 수 있습니까? 그는 "특정 비트 만 필요했다"고 말했다. BLOB 인 경우 모든 열을 복사하도록 하시겠습니까? 평균이라고 말하면 곧장 산술 평균을 의미한다고 가정합니다. 가중치가있을 수 있습니다. 그리고 SQL의 AVG를 사용할 수 있다고해도 문제는 해결되지 않습니다. –

0

이 방법을

+1

실제로 커서는 OP에 대해 무엇을 요구하지 않습니다. – zerkms

관련 문제