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";
-> 실행
....