테스트 사이트 - 개발 중인 베타 버전입니다

update 나눠서 하는 방법 채택완료

요고꽁 1년 전 조회 1,916

</p>

<p><?

include_once('./_common.php');</p>

<p>error_reporting(E_ALL);

ini_set('display_errors', 1);</p>

<p>$tree_data = 0;

function findUser($wr_id)

{

    global $model;

    global $tree_data;

    $childs = [];

    foreach ($model as $key => $val) {

        if ($val['wr_6'] == $wr_id) {

            $tree_data++;

            $childs[] = $val;

        }

    }

    foreach ($childs as $key => $val) {

        if ($val['wr_id'] == 1) {

            $result[] = $val;

        }

        findUser($val['wr_id']);

    }

}</p>

<p>$sql  = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10 FROM g5_write_plan_a a";

$my_result = sql_query($sql);

$model = array();

$start = microtime(true);

for ($i = 0; $row = sql_fetch_array($my_result); $i++) {

    $model[] = $row;

}

foreach ($model as $key => $val) {

    //if ($key == 1) {

    $tree_data = 0;

    //echo $val['wr_id'] . "
";

    findUser($val['wr_id']);

    $level = '0';

    if ($tree_data < '2') {

        $level = '0';

    }

    if ($tree_data >= '2' and $tree_data <= '5') {

        $level = '1';

    }

    if ($tree_data >= '6' and $tree_data <= '13') {

        $level = '2';

    }

    if ($tree_data >= '14' and $tree_data <= '29') {

        $level = '3';

    }

    if ($tree_data >= '30' and $tree_data <= '61') {

        $level = '4';

    }

    if ($tree_data >= '62' and $tree_data <= '125') {

        $level = '5';

    }

    if ($tree_data >= '126' and $tree_data <= '253') {

        $level = '6';

    }

    if ($tree_data >= '254' and $tree_data <= '509') {

        $level = '7';

    }

    if ($tree_data >= '510' and $tree_data <= '1021') {

        $level = '8';

    }

    if ($tree_data >= '1022' and $tree_data <= '2045') {

        $level = '9';

    }

    if ($tree_data >= '2046' and $tree_data <= '4093') {

        $level = '10';

    }

    if ($tree_data >= '4094' and $tree_data <= '8189') {

        $level = '11';

    }

    if ($tree_data >= '8190' and $tree_data <= '16381') {

        $level = '12';

    }

    if ($tree_data >= '16382' and $tree_data <= '32765') {

        $level = '13';

    }

    if ($tree_data >= '32766' and $tree_data <= '65533') {

        $level = '14';

    }

    if ($tree_data >= '65534' and $tree_data <= '131069') {

        $level = '15';

    }

    if ($tree_data >= '131070' and $tree_data <= '262141') {

        $level = '16';

    }

    if ($tree_data >= '262142' and $tree_data <= '524285') {

        $level = '17';

    }

    if ($tree_data >= '524286' and $tree_data <= '1048573') {

        $level = '18';

    }

    if ($tree_data >= '1048574' and $tree_data <= '2097149') {

        $level = '19';

    }

    if ($tree_data >= '2097150' and $tree_data <= '4194301') {

        $level = '20';

    }

     echo $val['wr_id'] . "
";

     echo "tree_data:".$tree_data."
";

     echo "level:".$level."
";

    $sql = " update g5_write_plan_a set wr_9 = '$level' where wr_id = '$val[wr_id]' ";

    sql_query($sql);

    //}

}

$end = microtime(true);

$time = $end - $start;

echo number_format($time, 8) . "
";</p>

<p>

 

처음질문내용

https://sir.kr/qa/520248?page=1&unanswered=0&unadopted=0&adopted=0

 

약 7만개가 넘다 보니 sql에 안들어간다고 답변을 주셨습니다. ㅠ

이거 1만개씩 나눠서 하려면 어떻게 하는게 좋을가요? 

ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

1년 전

php 화일문 안에 sleep() 등을 이용해서 만개마다 잠시 대기를 걸어 두고 돌리거나

 

자바스크립트 setTimeout등으로 업데이트 페이지를 AJax로 불러오는데 그곳에서는 만개씩 불러오게 하는 것도 방법입니다 

만개 끝나면 1초 정도 휴지 시간을 준 다음 다음 만개 불러오고 다 끝나면 1초 쉬고 다음것 만개 불러오고...

 

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

R
1년 전

set_time_limit(0);

일단 이것 부터 시도해보시길.

<?
include_once('./_common.php');
</code>set_time_limit(0); // 추가<code>
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tree_data = 0;
function findUser($wr_id)
{ 이하생략...
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

1년 전

안녕하세요.

다양한 방법이 있겠지만 아래의 코드도 한번 참고를 해보시겠어요~

 

 

// 레코드 개수와 현재 페이지 $limit = 10000; $page = 0;

while (true) {     $offset = $limit * $page;     $sql = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10 FROM g5_write_plan_a a LIMIT $limit OFFSET $offset";     $my_result = sql_query($sql);

    // 더 이상 처리할 레코드가 없으면 반복 종료     if (sql_num_rows($my_result) == 0) {         break;     }

    $model = array();     while ($row = sql_fetch_array($my_result)) {         $model[] = $row;     }

    // ... 기존 코드 (레코드 처리)

    // 페이지 증가     $page++; }

// ... 기존 코드 ?>  

 

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

요고꽁
1년 전
너무 자세히 넣어 주셔서 감사합니다.
버그 없이 잘 되는데 문제는 1만개만 들어가네요 ㅠ
7만개에 따라 1번 이 15레벨이면 1만개만 들어가다보니 1번이 레벨이 10으로 바뀌네요!
1만개만 인식해서 레벨 뿌려지는거 같아용 ㅠ 1번이라면 7만개 기준으로 레벨이 나와야 되거든요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인