이전 목록 다음
채택완료

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

2022-11-19 (토) 16:08:08 2,692

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

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

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

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

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

Copy
$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개 / 댓글 1개

채택된 답변
+20 포인트
2022-11-21 (월) 05:05:21

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

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

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

답변에 대한 댓글 1개

2022-11-21 (월) 08:03:11
아! 필드 갯수는 정해져 있으니 데이터 갯수 파악해서 모자란 만큼 ''로 채우면 되겠군요.
저는 필드갯수 = 데이터 갯수 맞추려고 어렵게만 생각했네요.
감사합니다.
2022-11-19 (토) 18:07:32

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

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

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

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

Copy
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');

답변을 작성하려면 로그인이 필요합니다.