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

update 문 질문드립니다. 채택완료

요고꽁 1년 전 조회 1,439

</p>

<p><?

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

<p>set_time_limit(0);</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';

    } else 

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

        $level = '1';

    } else 

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

        $level = '2';

    } else 

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

        $level = '3';

    } else 

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

        $level = '4';

    } else 

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

        $level = '5';

    } else 

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

        $level = '6';

    } else 

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

        $level = '7';

    } else 

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

        $level = '8';

    } else 

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

        $level = '9';

    } else 

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

        $level = '10';

    } else 

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

        $level = '11';

    } else 

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

        $level = '12';

    } else 

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

        $level = '13';

    } else 

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

        $level = '14';

    } else 

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

        $level = '15';

    } else 

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

        $level = '16';

    } else 

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

        $level = '17';

    } else 

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

        $level = '18';

    } else 

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

        $level = '19';

    } else 

    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) . "
";

 

앞서 질문드렸는데 계속 해결이 되질 않아 .. 다시한번 문의드립니다.

update 를 약 7만건 정도 해야 되는데
한번에 7만건을 다 업데이트로 쿼리 날리다 보니 sql에 삽입이 안됩니다.
혹시7만원건을

1만건씩 나눠서 업데이트 할수 있는 방법이 있을가요?
 전체 소스 남겨드립니다.

if문으로 wr_id = 1 번이다 일때 하단에 7만명이 잇으면 그 인원수에 따라 레벨이 측정되고
디비에 업데이트를 해줍니다.
근데 7만개는 디비에 한번에 안될수도 잇다고 하는데 이걸 나눠서 하면 해결될거 같아서입니다.

진짜 데이터 1만개만 남겨서 테스트해보니 정상으로 삽입이 되네요

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

답변 2개

채택된 답변
+20 포인트
M
1년 전

g5_write_plan_a 테이블을 사용하시는거잖아요.

조건절에 

1. g5_write_plan_a where wr_id>0 and wr_id<10000

2. g5_write_plan_a where wr_id>9999 and wr_id<200000

이런식으로 wr_id 기준으로 만건씩 나누시면 될듯 합니다.

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

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

1년 전

1차)

$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 10000";

-> 실행

 

2차)

$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 10000, 10000";

-> 실행

 

3차)

$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 20000, 10000";

-> 실행

 

4차)

$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 30000, 10000";

-> 실행

 

....

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

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

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

로그인