개발 Q&A

제목 구현방법 문의 드립니다.
카테고리 PHP
글쓴이 민속 작성시각 2019/08/07 10:44:31
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 9228   RSS

안녕하세요.

지금 구현하려는 기능이 있는데 조언 좀 부탁드립니다.

1.목적

- 여러개의 CSV파일을 취합하여 내부에서 만든 양식에 맞게 통합 CSV 파일을 만든 후 mySQL에 데이터를 입력하는 것이 목적입니다.

2.현재상황

- CSV파일이 5~6개정도 존재합니다.

- CSV파일들의 양식이 동일하지가 않습니다. 단, 업소명, 주소, 전화번호는 모든파일에 동일하게 들어가 있습니다. (현재로서는 전화번호로 중복데이터 제거를 하려합니다...)

- 중복된 데이터들이 있습니다.

3.구현하려는 것

- 내부에서 만든 CSV파일 약식에 맞게 끔 CSV 통합 파일로 만들고 mySQL에 저장을 하려 합니다.

- 가능하다면 mySQL에서 처리전 중복된 데이터를 제거하고 싶습니다.

 

그럼, 조언 좀 부탁드립니다.

감사합니다.

 다음글 JWT 새로발행시 기존 토큰 만료방법 문의드려요 (5)
 이전글 JAVA에서 PHP로 왔는데 잘한걸까요? (6)

댓글

kaido / 2019/08/07 11:00:27 / 추천 0

개인적인 의견입니다.

CSV 파일이 명확하지 않으면 사실 신뢰성 높은 데이터를 얻기 어렵습니다.

이전에 12개 업체에서 정산 데이터를 주었고 그걸 하나로 합쳐서 정산 데이터를 뽑는 작업을 진행 한적 있습니다만

업체마다 형태가 달라서, CSV 파일 업로드 파일을 업체마다 다르게 올리면, 각각 업체별로 분류 로직을 다르게 해서 1개의 table로 넣었던걸로 기억 합니다.

당연하게도 중간중간 데이터가 안맞는 부분이 있어서 엑셀 마다 합계과 실제 합계를 수동으로 비교하는 작업은 어쩔수 없더군요.

 

우선은 모든 데이터의 필드를 전부 나열하고, 중복되는 필드를 제거해서 하나의 공통된 필드를 생성 

그 다음에 각각 분류된 데이터를 넣어보고 이상이 있는 부분을 검토

최종적으로 각각 넣어서 최종 원하는 값이 맞는지 확인

 

이런식으로 진행이 되지 않을까 싶습니다.

물론 테스트하기 쉽게 유닛으로 구성하면 더욱 편하게 확인이 가능 할거라 보입니다.

 

매번 수동으로 검토하는 부분이 있긴 하지만, 원래는 직원 한명이 1달 내내 붙잡던 일을 반나절 만으로 줄일수 있다는것에 큰 의의를 두었습니다 ㅎㅎ

민속 / 2019/08/07 11:11:12 / 추천 0
아.. 그렇군요.. 답변감사드립니다^^
민속 / 2019/08/07 11:19:03 / 추천 0
CSV 파일을 읽어와 통합을 하려면 fgetcsv 함수를 사용하여 구현하면 될까요??
kaido / 2019/08/07 11:22:22 / 추천 0
우선  1개의 csv 파일을 업로드하고 db에 넣는 부분부터 시작 하시면 하나씩 답이 보여지실것으로 보여집니다.
엽토군 / 2019/08/07 15:10:04 / 추천 0

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 지금 제가 딱 하고 있고 해야하는 작업 이네요 ㅋㅋㅋㅋㅋ

저라면 인터페이스 하나 정의해서 쓰겠습니다.

<?php

Interface CSVImporter {
  public funtion getCSV();
  public funtion getColumnA();
  public funtion getColumnB();
  // ...
  public funtion getRow();
  public funtion getAllRows();
  public funtion insertAllRows();
}

이런식으로 쭉 적어놓고, 각 컨트롤러가 class 어쩌구 implements CSVImporter 로 해당 인터페이스를 상속하고, 클래스 안에서 메소드 구현해서 실제 처리를 하구요.