2012-04-22 2 views
1

나는 많은 것을 수색했지만 아직 답을 찾을 수없는 것에 당신의 도움을 원합니다. 질문 제목으로, 열의 데이터 형식을 모르는 mySql 데이터베이스에 테이블을 만들려고합니다. 기본적으로, 나는 CSV 파일에서 내 데이터베이스에 새 테이블을 만들려면 PHP를 사용합니다. 첫 번째 행은 열 이름을 포함합니다. 내가 csv 파일을 선택하고 첫 번째 줄을 사용하여 테이블 열 이름을 생성하고 각 열의 데이터 유형을 지정하지 않아도 phpMyAdmin에서 본 것이므로이 작업을 수행 할 수 있음을 알고 있습니다.mySql : uknown 데이터 유형으로 테이블을 만드는 방법은 무엇입니까?

$databaseName="myDatabase"; 
mysql_connect("localhost","xxxxxx","xxxxxxxx"); 
mysql_select_db($databaseName); 


for($i = 0; $i < count($newFiles); $i++){//traverse the table that contains the file names 
     $content = file($newFileLocation.$newFiles[$i]); 

     //First line: $content[0]; 
     $firstLine=$content[0];//save first line which are the column names 
     //echo $firstLine; 
     $tableName= str_replace('.txt','', $newFiles[$i]);//remove the .txt to use for table name 
     //echo $tableName."\n"; 

     echo "\n\ncreating tables\n\n"; 
     /*mysql_query("load data local infile '$newFiles[$i]' 
       into table $tableName 
        fields terminated by ',' 
        lines terminated by '\n' 
        ($firstLine) "); */ 


     mysql_close(); 
} 

답변

0

다음은 문제의 해결책입니다. 처음에는 파일의 첫 번째 줄을 가져와 cols 이름을 저장합니다 (테이블을 만드는 방법을 알 수 있도록). 문자열로 저장 한 다음 쉼표 문자를 기준으로 구분합니다. 그런 다음 값이 들어있는 파일의 두 번째 줄을 가져옵니다. 그 줄을 문자열에 저장하고 문자열을 쉼표 문자에 따라 다른 값으로 분리합니다. 우리는 이것을 사용하여 각 열의 유형을 식별합니다.

코드입니다.

$databaseName="myDatabase"; 
mysql_connect("localhost","xxxxxx","xxxxxxxx"); 
mysql_select_db($databaseName); 


for($k = 0; $k < count($newFiles); $k++){//traverse the table that contains the file names 
      $content = file($newFileLocation.$newFiles[$k]); 

      //First line: $content[0]; 
      $firstLine=$content[0]; 
      $secondLine=$content[1]; 
      //echo $firstLine."\n"; 
      $firstLine = str_replace("\r\n",'',$firstLine); 
      $colNames=explode(',',$firstLine); 
      $fieldList = explode(',',$secondLine); 

      $dataType=""; 
      for($i = 0; $i < count($fieldList); $i++){ 
       if (is_numeric($fieldList[$i])){ 
         if (strpos($fieldList[$i],'.') == false){ 
          $fieldList[$i] = (int)$fieldList[$i]; 
         }else{ 
          $fieldList[$i] = (float)$fieldList[$i]; 
         } 
        } 

       switch(gettype($fieldList[$i])) { 
         case 'integer': 
          $typeInfo = 'int(11)'; 
          break; 
         case 'float': 
         case 'double': 
           $typeInfo = 'float'; 
           break; 

         case 'string': 
           $typeInfo = 'varchar(80)'; 
          break; 
         default: 
           $typeInfo = 'varchar(80)'; 
           break; 
         } 

       if(gettype($fieldList[$i]) != NULL) { 
        $dataType= $dataType.'`'.$colNames[$i].'` '." ".$typeInfo.' NOT NULL'; 
        if(($i)!=count($fieldList)-1){ 
         $dataType= $dataType.","; 
        } 
       } 
      } //end of for loop 


      $tableName= str_replace('.txt','', $newFiles[$k]); 
      //echo $tableName."\n"; 

      // 
       //echo "\n".$dataType."\n"; 
       $succ=mysql_query("CREATE TABLE `$tableName` ($dataType)"); 
       if($succ) 
        echo "Table ".$tableName." was created Succesfully \n"; 

       //echo $databaseName; 

       $loadsql = 'LOAD DATA LOCAL INFILE "'.$newFileLocation.$newFiles[$k].'" INTO TABLE `'.$tableName.'` FIELDS TERMINATED BY "," IGNORE 1 LINES ('.$firstLine.')'; 
       mysql_query($loadsql);  




     }//end of for loop 


    mysql_close(); 
1

의 MySQL에는 '알 수없는'데이터 형식 (어쩌면 BLOB 유형 것과 가장 유사하다) 없다 : 지금까지이 내 PHP 코드입니다.

실제로 테이블 필드를 이름에서 자동으로 정의해야하며 거기에 저장할 데이터 유형을 모르는 경우에는 blob 또는 텍스트로 만들고 값을 저장할 때에서 만든 텍스트 표현을 만듭니다. 헤더로서의 실제의 타입과 값의 텍스트 표현.

아니면 어쩌면 그럴 필요가 없습니다. Using PHP to take the first line of a CSV file and create a MySQL Table with the data을 확인하면 거기에 대한 답변을 찾을 수 있습니다.

+0

안녕하세요. 링크를 가져 주셔서 감사합니다. 정말 도움이되었습니다. 해당 링크를 기반으로 솔루션을 게시 할 예정입니다. –

관련 문제