api 데이터를 주기적으로 db에 저장 및 업데이트 2번째 질문입니다. 채택완료
강산몽
6년 전
조회 3,081
@유진아빠님 도움으로 아래 코드 업데이트는 되는데, 문제는 단발성이 아닌 주기적 업데이트 하려고 합니다.
아래 실행하면, 마지막 레코드인 C만 실행되어요. A와 B도 불러와 업데이트하려면 어떻게 수정해야 하나요?
</p>
<p><?php
$mydata = array(
'A' => array ( 'D' => 1 ),
'B' => array ( 'D' => 2 ),</p>
<p>'C' => array ( 'D' => 2 )
);
// ok now hit the api...
$basePublicAPI = '<a href="https://api';" target="_blank" rel="noopener noreferrer">https://api';</a>
$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);
}
?></p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 2개
채택된 답변
+20 포인트
답변에 대한 댓글 13개
�
강산몽
6년 전
현재 데이터는 C만 오는데요, 향후 D, E, F가 추가 될 수 도 있고, 경우에 따라서는 A만 올 경우도 있어요. 필요에 때라 A, B, C와 추가 D, E, F 등 정의하려고 합니다.
�
유찬아빠
6년 전
그렇다면 해당 배열 키 인덱스 키를 체크 하시고
where 절을 주셔야 합니다.
인서트 할게 아니고 업데이트 만 하신다면요
update g5_data set no....... where name = '".$Data[$xx]['name']."' 이런식으로 이름을 조건절에 주시던가 no 를 조건절에 주시던지요..
where 절을 주셔야 합니다.
인서트 할게 아니고 업데이트 만 하신다면요
update g5_data set no....... where name = '".$Data[$xx]['name']."' 이런식으로 이름을 조건절에 주시던가 no 를 조건절에 주시던지요..
�
유찬아빠
6년 전
추가 하자면 넘어오는 데이터가 기존에 있으면 업데이트를 하고 없으면 인서트 해야 하는 걸로 보이는데요....
기존 데이터가 모두 들어가 있고 업데이트만 해야 한는 경우라면 몰라도요
기존 데이터가 모두 들어가 있고 업데이트만 해야 한는 경우라면 몰라도요
�
유찬아빠
6년 전
no 가 변하지 않는 고유의 키값이라면 where no=~~ 하시고
no 를 기준으로 디비에 있으면 업데이트 없으면 인서트 이렇게 하셔야 모든 데이터가 들어가지요
no 를 기준으로 디비에 있으면 업데이트 없으면 인서트 이렇게 하셔야 모든 데이터가 들어가지요
�
유찬아빠
6년 전
기존 저 소스는 데이터가 10개가 와도 마지막에 업데이트 되므로 한개만 업데이트 되는것 처럼 보이는 겁니다.
즉 g5_data 데이터가 100개가 있어도 마지막 값이 모두 들어간다는 말입니다.
즉 g5_data 데이터가 100개가 있어도 마지막 값이 모두 들어간다는 말입니다.
�
강산몽
6년 전
감사합니다. 이렇게 하면 어떨까요? 먼저 테이블에 있는 모든 데이터 delete하고 다시 insert 그리고 또 15분후 모든 데이터 delete하고 다시 insert하면 될 것 같아서요. ㅠ
�
유찬아빠
6년 전
그렇게 하셔도 되지만..
넘어오는 값중에 변하지 않는 값이 없나요?
넘어오는 값중에 변하지 않는 값이 없나요?
�
유찬아빠
6년 전
추후에 데이터양이 많아지면 별로 추천드리고 싶지 않습니다.
�
강산몽
6년 전
감사합니다. 변하지 않는 값은 A, B, C 이름은 항상 똑 같고, 나머지 넘어오는 값은 계속 변해요.
이렇게 DB에 저장하려고 하는 이유는 api로 받아서 홈페이지에 뿌려주니, 로딩 시간이 너무 오래 걸려서요.
이렇게 DB에 저장하려고 하는 이유는 api로 받아서 홈페이지에 뿌려주니, 로딩 시간이 너무 오래 걸려서요.
�
유찬아빠
6년 전
그렇다면 이름을 기준으로 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']."' " );
이렇게 하시면 이름을 기준으로 없으면 인서트 있으면 업데이트 합니다.
그게 아니라면 테이블을 비우시고 인서트 하셔야 겠지요.
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']."' " );
이렇게 하시면 이름을 기준으로 없으면 인서트 있으면 업데이트 합니다.
그게 아니라면 테이블을 비우시고 인서트 하셔야 겠지요.
�
강산몽
6년 전
죄송합니다. 제가 이해를 못해서요. 그 말씀은 아래와 같이 고치면 된다는 말씀인가요?
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']."' " );
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']."' " );
�
유찬아빠
6년 전
if ( !$Held ) { continue; }
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']."' " );
네 변하지 않은 값이 이름이라면요
�
강산몽
6년 전
말씀하신데로 해도 데이터가 update 되지 않네요. 일단은 주기적으로 데이터 삭제 후 insert하려고요. 그런데도 아래와 같이 해도 delete가 되지 않아요. 어떻게 변경하면 될까요?
아래 코드를 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);
}
아래 코드를 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);
}
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인