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);
}
혹시 다른 좋은 방법있으면 알려주시면 감사하겠습니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.