programing

mysql_* 함수를 사용하여 MySQL 결과 세트를 여러 번 루프하려면 어떻게 해야 합니까?

shortcode 2022. 10. 26. 22:57
반응형

mysql_* 함수를 사용하여 MySQL 결과 세트를 여러 번 루프하려면 어떻게 해야 합니까?

어떤 이유로든 MySQL 결과 세트를 두 번 확인해야 합니다.방법이 있을까요?

쿼리를 두 번 실행하고 싶지 않으며 행을 저장하고 나중에 재사용하도록 스크립트를 다시 작성할 필요도 없습니다.

다음과 같이 할 수 있습니다.

$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
 // do whatever here...
}

// set the pointer back to the beginning
mysql_data_seek($result, 0);
while($row = mysql_fetch_assoc($result)){
 // do whatever here...
}

하지만, 이건 올바른 방법이 아닌 것 같습니다.첫 번째 루프 내에서 처리를 하면 어떨까요?

mysqli의 경우 다음 작업을 수행해야 합니다.

$result= $con->query($sql); // $con is the connection object
$result->data_seek(0); 

mysql_data_seek()이 필요한 기능을 수행하는지 확인합니다.

mysql_data_seek()는 지정된 결과 식별자와 연관된 MySQL 결과의 내부 행 포인터를 지정된 행 번호를 가리키도록 이동합니다.mysql_fetch_assoc()와 같은 MySQL 가져오기 함수에 대한 다음 호출은 해당 행을 반환합니다.

row_number는 0부터 시작합니다.row_number는 0 ~mysql_num_rows() - 1 범위의 값이어야 합니다. 그러나 결과 집합이 비어 있으면(seek_num_rows() == 0), 0에 대한 검색이 실패하고 E_WARNING과 함께 mysql_data_seek()가 FALSE를 반환합니다.

데이터 검색 대신 값을 배열에 저장하는 방법이 있습니다.

$arrayVals = array();
$result = mysql_query(/* Your query */);
while($row = mysql_fetch_assoc($result)){
    $arrayVals[] = $row;
}

// Now loop over the array twice instead

$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
    $row = $arrayVals[$x];

    // Do something here    
}

$len = count($arrayVals);
for($x = 0; $x < $len; $x++) {
    $row = $arrayVals[$x];

    // Do something else here   
}

제가 이걸 해보진 않았지만, 첫 번째 반복 후에 시도해 보셨나요?

mysql_data_seek($queryresult,0);

첫 번째 레코드에 갈 수 있을까?

mysql_data_seek을 사용하여 내부 포인터를 데이터 세트의 선두로 이동할 수 있습니다.그러면 다시 한 번 반복하면 돼요.

읽은 행의 수를 항상 세고 다음과 같은 작업을 수행할 수 있습니다.

if (rownumber == mysql_num_rows($result)) { mysql_data_seek($result, 0); }

왜 그래야 하는지는 모르겠지만, 여기 있네요.

언급URL : https://stackoverflow.com/questions/6439230/how-can-i-loop-through-a-mysql-result-set-more-than-once-using-the-mysql-funct

반응형