api 데이터를 주기적으로 db에 저장 및 업데이트 2번째 질문입니다.
@유진아빠님 도움으로 아래 코드 업데이트는 되는데, 문제는 단발성이 아닌 주기적 업데이트 하려고 합니다.
아래 실행하면, 마지막 레코드인 C만 실행되어요. A와 B도 불러와 업데이트하려면 어떻게 수정해야 하나요?
<?php
$mydata = array(
'A' => array ( 'D' => 1 ),
'B' => array ( 'D' => 2 ),
'C' => array ( 'D' => 2 )
);
// ok now hit the api...
$basePublicAPI = 'https://api';
$Data = file_get_contents($basePublicAPI);
$Data = json_decode($Data, true);
$numbases = sizeof ($Data);
$portfolioValue = 0;
for ( $xx=0; $xx<$numbases; $xx++) {
$thisname = $Data[$xx]['name'];
$Held = array_key_exists($thisname, $mydata);
if ( !$Held ) { continue; }
$sql = " update g5_data
set no = '"."$Data[$xx]['no']."',
name = '".$Data[$xx]['name']."' ";
sql_query($sql);
}
?>
답변 2개 / 댓글 13개
일단 print_r($Data); 하셔서
데어터가 몇개가 오는지 부터 확인하셔야 할듯합니다.
답변에 대한 댓글 13개
where 절을 주셔야 합니다.
인서트 할게 아니고 업데이트 만 하신다면요
update g5_data set no....... where name = '".$Data[$xx]['name']."' 이런식으로 이름을 조건절에 주시던가 no 를 조건절에 주시던지요..
기존 데이터가 모두 들어가 있고 업데이트만 해야 한는 경우라면 몰라도요
no 를 기준으로 디비에 있으면 업데이트 없으면 인서트 이렇게 하셔야 모든 데이터가 들어가지요
즉 g5_data 데이터가 100개가 있어도 마지막 값이 모두 들어간다는 말입니다.
이렇게 DB에 저장하려고 하는 이유는 api로 받아서 홈페이지에 뿌려주니, 로딩 시간이 너무 오래 걸려서요.
sql_query("insert into g5_data ( no, name ) values ( '".$Data[$xx]['no']."' , '".$Data[$xx]['name']."' ) ON DUPLICATE KEY UPDATE name= '".$Data[$xx]['name']."' ,no = '".$Data[$xx]['no']."' " );
이렇게 하시면 이름을 기준으로 없으면 인서트 있으면 업데이트 합니다.
그게 아니라면 테이블을 비우시고 인서트 하셔야 겠지요.
if ( !$Held ) { continue; }
$sql = " update g5_data
set no = '"."$Data[$xx]['no']."',
name = '".$Data[$xx]['name']."' ";
sql_query("insert into g5_data ( no, name ) values ( '".$Data[$xx]['no']."' , '".$Data[$xx]['name']."' ) ON DUPLICATE KEY UPDATE name= '".$Data[$xx]['name']."' ,no = '".$Data[$xx]['no']."' " );
sql_query("insert into g5_data ( no, name ) values ( '".$Data[$xx]['no']."' , '".$Data[$xx]['name']."' ) ON DUPLICATE KEY UPDATE name= '".$Data[$xx]['name']."' , no = '".$Data[$xx]['no']."' " );
네 변하지 않은 값이 이름이라면요
아래 코드를 15분마다 돌리게 하려고 하는데, 원하는데로 삭제 => 삽입이 되지 않아요. ㅠ
if ( !$Held ) { continue; }
$sql = "truncate g5_data";
$sql = " insert into g5_data
set no = '"."$Data[$xx]['no']."',
name = '".$Data[$xx]['name']."' ";
sql_query($sql);
}
if ( !$Held ) { continue; }
$sql = "truncate g5_data";
sql_query($sql);
$sql = " insert into g5_data
set no = '"."$Data[$xx]['no']."',
name = '".$Data[$xx]['name']."' ";
sql_query($sql);
}
답변을 작성하려면 로그인이 필요합니다.