테스트 사이트 - 개발 중인 베타 버전입니다

mysql 데이터 필드 수가 다를 때 INSERT 채택완료

타버린나무 2년 전 조회 1,921

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

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

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

 

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

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

</p>

<p>$sql = "INSERT INTO `test` VALUES ( '', ";

    foreach($val as $key1 => $val1) {

        if($x == $length) { $jjum = " "; } else { $jjum = ","; }

        $sql .= " '{$val1}'{$jjum}";</p>

<p>        $x++;

    }

$sql .= "); ";</p>

<p>sql_query($sql);

 

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

답변 3개

채택된 답변
+20 포인트

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

</p>

<p>    $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' ];  // 전체 필드명</p>

<p>foreach($data as $key => $val) {

    $length = count($val);

    if( !$val['A'] ) { continue; }

        $x = 1; // 배열 끝 확인용

        $sql = "INSERT INTO `{$db_name}` ( ";</p>

<p>        for($i=1; $i <=$length; $i++) {  // 데이터 필드 갯수에 따라 테이블 필드 갯수 정의

            if($x == $length) { $jjum = " "; } else { $jjum = ","; }

            $sql .= " `{$fields[$i-1]}`{$jjum}";

            $x++;

        }</p>

<p>        $x = 1; // 배열 끝 확인용

        $sql .= ") VALUES ( ";

            foreach($val as $key1 => $val1) {

                if($x == $length) { $jjum = ""; } else { $jjum = ","; }

                $sql .= " '{$val1}'{$jjum}";

                $x++;

            }

        $sql .= "); ";

        sql_query($sql);

}

 

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

로그인 후 평가할 수 있습니다

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

2년 전

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

</p>

<p>INSERT INTO `test` (`a`, `b`, `c`, `d`) VALUES ('a', 'b', 'c', 'd');</p>

<p>INSERT INTO `test` (`f1`, `f2`, `f3`, `f4`, `f5`) VALUES ('v1', 'v2', 'v3', 'v4', 'v5');</p>

<p>

로그인 후 평가할 수 있습니다

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

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

로그인