mysql 데이터 필드 수가 다를 때 INSERT

mysql 데이터 필드 수가 다를 때 INSERT

QA

mysql 데이터 필드 수가 다를 때 INSERT

답변 3

본문

test 테이블에 a,b,c,d....... 200개의 필드가 있습니다.

데이터 필드는 갯수가 200개 딱 맞는것도 있지만 100개짜리 등 데이터마다 조금씩 다릅니다.

INSERT INTO 할때 데이터 필드갯수 상관없이 넣을 수 있는 방법이 있을까요

 

참고로 아래 코드는 데이터의 필드갯수가 200개 짜리일때 쓰는 코드입니다.

데이터 필드 갯수가 안맞으면 쓸수가 없네요. 어딜 손봐야 할까요...


$sql = "INSERT INTO `test` VALUES ( '', ";
    foreach($val as $key1 => $val1) {
        if($x == $length) { $jjum = " "; } else { $jjum = ","; }
        $sql .= " '{$val1}'{$jjum}";
        $x++;
    }
$sql .= "); ";
sql_query($sql);

 

이 질문에 댓글 쓰기 :

답변 3

엑셀에서 자료를 DB에 넣는 것으로 추측 되는데요.

값이 비어 있는 경우라면 그냥 '' 등으로 처리하시면 됩니다.

뒷부분이 모자란 경우는 해당 갯수만큼 ''로 채워 주시면 됩니다.

아!  필드 갯수는 정해져 있으니 데이터 갯수 파악해서 모자란 만큼 ''로 채우면 되겠군요.
저는 필드갯수 = 데이터 갯수 맞추려고 어렵게만 생각했네요.
감사합니다.

명시적으로 필드를 나열하면 됩니다.


INSERT INTO `test` (`a`, `b`, `c`, `d`) VALUES ('a', 'b', 'c', 'd');
INSERT INTO `test` (`f1`, `f2`, `f3`, `f4`, `f5`) VALUES ('v1', 'v2', 'v3', 'v4', 'v5');

조금 무식한 방법인지 모르겠지만.. 아무튼 해결은 했습니다.


    $fields = [     'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                    'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ',
                    'BA','BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ',
                    'CA','CB','CC','CD','CE','CF','CG','CH','CI','CJ','CK','CL','CM','CN','CO','CP','CQ','CR','CS','CT','CU','CV','CW','CX','CY','CZ',
                    'DA','DB','DC','DD','DE','DF','DG','DH','DI','DJ','DK','DL','DM','DN','DO','DP','DQ','DR','DS','DT','DU','DV','DW','DX','DY','DZ',
                    'EA','EB','EC','ED','EE','EF','EG','EH','EI','EJ','EK','EL','EM','EN','EO','EP','EQ','ER','ES','ET','EU','EV','EW','EX','EY','EZ',
                    'FA','FB','FC','FD','FE','FF','FG','FH','FI','FJ','FK','FL','FM','FN','FO','FP','FQ','FR','FS','FT','FU','FV','FW','FX','FY','FZ',
                    'GA','GB','GC','GD','GE','GF','GG','GH','GI','GJ','GK' ];  // 전체 필드명
foreach($data as $key => $val) {
    $length = count($val);
    if( !$val['A'] ) { continue; }
        $x = 1; // 배열 끝 확인용
        $sql = "INSERT INTO `{$db_name}` ( ";
        for($i=1; $i <=$length; $i++) {  // 데이터 필드 갯수에 따라 테이블 필드 갯수 정의
            if($x == $length) { $jjum = " "; } else { $jjum = ","; }
            $sql .= " `{$fields[$i-1]}`{$jjum}";
            $x++;
        }
        $x = 1; // 배열 끝 확인용
        $sql .= ") VALUES ( ";
            foreach($val as $key1 => $val1) {
                if($x == $length) { $jjum = ""; } else { $jjum = ","; }
                $sql .= " '{$val1}'{$jjum}";
                $x++;
            }
        $sql .= "); ";
        sql_query($sql);
}

 

혹시 다른 좋은 방법있으면 알려주시면 감사하겠습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
  • 질문이 없습니다.
전체 0
© SIRSOFT
현재 페이지 제일 처음으로