update 문 질문드립니다.

update 문 질문드립니다.

QA

update 문 질문드립니다.

본문


<?
include_once('./_common.php');
set_time_limit(0);
error_reporting(E_ALL);
ini_set('display_errors', 1);
$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']);
    }
}
$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'] . "<br>";
    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'] . "<br>";
     echo "tree_data:".$tree_data."<br>";
     echo "level:".$level."<br>";
    $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) . "<br>";

 

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

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

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

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

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

이 질문에 댓글 쓰기 :

답변 2

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차)

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

-> 실행

 

....

답변을 작성하시기 전에 로그인 해주세요.
전체 103
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT