update 나눠서 하는 방법
본문
<?
include_once('./_common.php');
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';
}
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'] . "<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>";
처음질문내용
https://sir.kr/qa/520248?page=1&unanswered=0&unadopted=0&adopted=0
약 7만개가 넘다 보니 sql에 안들어간다고 답변을 주셨습니다. ㅠ
이거 1만개씩 나눠서 하려면 어떻게 하는게 좋을가요?
ㅠㅠ
!-->답변 4
안녕하세요.
다양한 방법이 있겠지만 아래의 코드도 한번 참고를 해보시겠어요~
<?php
// ... 기존 코드
// 레코드 개수와 현재 페이지
$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++;
}
// ... 기존 코드
?>
set_time_limit(0);
일단 이것 부터 시도해보시길.
<?
include_once('./_common.php');
set_time_limit(0); // 추가
error_reporting(E_ALL);
ini_set('display_errors', 1);
$tree_data = 0;
function findUser($wr_id)
{ 이하생략...
php 화일문 안에 sleep() 등을 이용해서 만개마다 잠시 대기를 걸어 두고 돌리거나
자바스크립트 setTimeout등으로 업데이트 페이지를 AJax로 불러오는데 그곳에서는 만개씩 불러오게 하는 것도 방법입니다
만개 끝나면 1초 정도 휴지 시간을 준 다음 다음 만개 불러오고 다 끝나면 1초 쉬고 다음것 만개 불러오고...