Terry Very Good

[Mysql] CSV를 DB에 업로드 하기 전, CSV에 없는 필드값(deptCD) 비교 후 삭제하기 본문

프로그래밍/(WEB) DB관리

[Mysql] CSV를 DB에 업로드 하기 전, CSV에 없는 필드값(deptCD) 비교 후 삭제하기

테리베리 2021. 1. 12. 17:08
728x90
반응형

로직

(while문) SELECT문으로 DB데이터 순차적으로 읽기
|        (for문) CSV파일 전체 읽으며 DB데이터와 비교
|         |          DB의 deptCD와 CSV의 deptCD 중 겹치는 것이 있다면 flag=1, 없으면=2
|         /
|        순차적으로 읽혀지는 DB데이터 처리(삭제하든 냅두든)
/

<?php
echo "--------------------------------------------------\n";
echo "오래된 조직도 DB를 교체하는 과정이다. \n";
echo "개편조직도데이터는 csv파일에 있으며, csv의 deptCD가 DB에 없다면 \n";
echo "사라진 조직이므로 삭제하는 코드를 짰다.\n";
echo "--------------------------------------------------\n\n\n";
include '../conn.php';

#echo "----------csv파일 내용을 읽고, 한줄씩 쪼개는 과정----------";
$cmd = "cat ./dept_update_info.csv";
$res = `$cmd`;
$rows = explode("\n",$res);
$flag = "";

#echo "----------DB쪽  Data를 가져오는 과정----------";
$trash_value = "1233";  # 의미없는 값임.
$sql = "SELECT * FROM iqms.dept_info WHERE deptCD!=?";
$sql_obj = $conn->prepare($sql);
$sql_obj->bind_param("s", $trash_value);
$sql_obj->execute();
$result = $sql_obj->get_result();

#print_r($result);

#echo "----------DB 데이터를 하나씩 읽는 과정----------";
while($row = $result->fetch_assoc())
{
  #echo "----------csv 데이터를 하나씩 읽는 과정----------";
  for($i=2; $i < count($rows)-1; $i++)
  {
    $data=explode(",",$rows[$i]);

    #echo "----------DB쪽 deptCD데이터 1개와 CSV파일 전체의 deptCD데이터를 비교한다.----------";
    if($row["deptCD"]==$data[1])
    {
      #echo "두개의 데이터가 같다.";
      $flag = "1";
      break;
    }
    else
    {
      #echo "두개의 데이터가 다르다.";
      $flag = "2";
    }
  }

  if($flag = "2") #DB에 CSV값과 다른 값이 있다면 삭제.
  {
    $sql =  "DELETE FROM iqms.dept_info WHERE deptCD = ?";
    $sql_obj = $conn->prepare($sql);
    $sql_obj->bind_param("s",$data[1]);
    $sql_obj->execute();
    $result2 = $sql_obj->get_result();
  }
}


?>
728x90
반응형