워크시트(.xlsx) 이용한 DB 입력방법 질문

워크시트(.xlsx) 이용한 DB 입력방법 질문

QA

워크시트(.xlsx) 이용한 DB 입력방법 질문

본문

3554714984_1531560146.4196.png

 

위 엑셀 시트에서 추출은 짜집기로 작업을 했습니다.

컬럼 부분에서 번호가 중복 세개씩 진행이 됩니다,

이것을 유형이러는 DB 컬럼을 만들어 주입 하려 합니다.

 

아래 코드는 유형을 제외하고 짜집기 하여 정상 작동됩니다.

 


... DB 연결, 기타 생략..
 $xlsx = new SimpleXLSX( 'worksheet.xlsx' );
    $cont = 0;
 $answer_num = 5; // 객관식5
 $subject_num = 4; // 유형 최대 4가지
      
    foreach ($xlsx->rows(1) as $fields) { // 워크시트
        $cont++;
        if ($cont > 1) {
   $type = $fields[0];  // 객관식=1, 주관식=2, 논술형=3
   switch($type) {
      case    "객관식" : $q_type = '1'; break;
      case "주관식" : $q_type = '2'; break;
      case "논술형" : $q_type = '3'; break;
      default  : $q_type = '1'; break;
   }
   
   $question_subject_id = $fields[1]; // 문제 번호
   $question_description = $fields[2]; // 문제 제목
   $answer_isright = $fields[3]; // 정답
   $answer_id = '';
   $answer_question_id =  $question_subject_id; // 문항에 해당하는 문제번호 추출
   $subject_type  = '1';    // 출제 유형 A형, B형
// for ($s = 1, $j = 0; $s <= 10; $j += 1, print $s, $i++);
   $question_type = $q_type;   // 객관식=1, 주관식=2, 논술형=3
   $answer_type = $subject_type;  // 문항에 해당하는 문제 유형
   $answer_description1 =  $fields[4]; // 문항①(객관식/객관식5)
   $answer_description2 =  $fields[5]; // 문항②(객관식/객관식5)
   $answer_description3 =  $fields[6]; // 문항③(객관식/객관식5)
   $answer_description4 =  $fields[7]; // 문항④(객관식/객관식5)
   $answer_description5 =  $fields[8]; // 문항⑤(객관식5)
   //$answer_description =  $fields[9]; // 비고(설명)
   //$answer_description =  $fields[10]; // 점수
   //$answer_description =  $fields[11]; // 범주
   //$answer_description =  $fields[12]; // 지문
 
            //CADASTRA fields
            $sql = "INSERT INTO eTEST_questions (
   question_id,
   question_subject_id,
   subject_type,
   question_description,
   question_explanation,
   question_type,
   question_difficulty,
   question_enabled,
   question_position,
   question_timer,
   question_fullscreen,
   question_inline_answers,
   question_auto_next) VALUES (
   '$question_id',
   '$question_subject_id',
   '$subject_type',
   '$question_description',
   '$question_explanation',
   '$question_type',
   '$question_difficulty',
   '$question_enabled',
   '$question_position',
   '$question_timer',
   '$question_fullscreen',
   '$question_inline_answers',
   '$question_auto_next')";
  $res2 = mysqli_query($con,$sql);
 for ($i=1; $i<$answer_num; $i++) {
  if($fields[3] == $i) { $answer_isright = "1"; } else { $answer_isright = "0"; } // 해당 문항이 정답이면 = 1, 아니면 = 0
  switch($i) {
    case    "1" : $answer_description =  $fields[4];  // 문항①(객관식/객관식5)
    break;
    case    "2" : $answer_description =  $fields[5];  // 문항①(객관식/객관식5)
    break;
    case    "3" : $answer_description =  $fields[6];  // 문항①(객관식/객관식5)
    break;
    case    "4" : $answer_description =  $fields[7];  // 문항①(객관식/객관식5)
    break;
    case    "5" : $answer_description =  $fields[8];  // 문항①(객관식/객관식5)
    default :
    break;
    }
            $sql = "INSERT INTO eTEST_answers (
   answer_id,
   answer_question_id,
   answer_type,
   answer_description,
   answer_explanation,
   answer_isright,
   answer_enabled,
   answer_position) VALUES (
   '$answer_id',
   '$answer_question_id',
   '$answer_type',
   '$answer_description',
   '$answer_explanation',
   '$answer_isright',
   '$answer_enabled',
   '$answer_position')";
   $res1 = mysqli_query($con,$sql);
 }
        }

 

유형의 컬럼은 $subject_type 지정하였습니다.

현재 기본값으로 모드 '1' 유형으로 주입이 되어 버립니다.

현재)

번호 1에 유형1

번호 1에 유형1

번호 1에 유형1

번호 2에 유형1

번호 2에 유형1

번호 2에 유형1

......(생략)

변경하고자 하는 부분은

변경)

번호 1에 유형1

번호 1에 유형2

번호 1에 유형3

번호 2에 유형1

번호 2에 유형2

번호 2에 유형3

......(생략)

이런식으로 유형은 분리 할수 있을까요?

즉 DB 쿼리 진행시 

번호 1번 문제에 유형 1

번호 1번 문제에 유형 2

번호 1번 문제에 유형 3

 

동일 문제명 번호에 동일 지문 또는 유사 지문이라 분류가 필요할것 같아서 하려하는데

잘 응용이 되지 않네요...

이 질문에 댓글 쓰기 :

답변 1


   // $subject_type  = '1';    // 출제 유형 A형, B형(1형, 2형, 3형 ......)
  switch($s_cnt) {
    case    "1" : $subject_type =  $s_cnt;  // 이전에 입력된 동일문제 번호가 없을때 1
    $s_cnt++;
    break;
    case    "2" : $subject_type =  $s_cnt;  // 이전에 입력된 동일문제 번호가 있을때 2
    $s_cnt++;
    break;
    case    "3" : $subject_type =  $s_cnt;  // 이전에 입력된 동일문제 번호가 있을때 3
    $s_cnt = '1';
    break;
    default : $s_cnt = '1';
    break;
    }

 

원하는 결과는 얻었는데 뭔가 좀....

올바른 방법을 알고 싶습니다.

 

위 방법이 좀 이상한것 같아 문의 드립니다.

유형이 추가 될때 마다 코드 수정해야 되는것 같구...좀...뭐...가..

답변을 작성하시기 전에 로그인 해주세요.
전체 57
QA 내용 검색
filter #list ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT