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

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

QA

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

본문

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);
}

 

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

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

회원로그인

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