2012-01-05 3 views
4

데이터베이스를 상속했으며 더 깨끗하고 유용하게 만들려고 노력하면서 다음과 같은 문제가 발생했습니다.문자열을 SQL의 여러 행으로 분할

파일 열을 별도의 테이블로 이동 한 후 이제 이러한 파일을 다른 행으로 분리해야합니다. 아래 예제를 참조하십시오.

key | jobid  | files     | 
-------------------------------------------- 
1  30012  file1.pdf;file2.pdf 
2  30013  file3.pdf 
3  30014  file4.pdf;file5.pdf;file6.pdf 

나는에 테이블을 만들 것 SQL 문을하고자 다음 : 원래 져야 할 엔트리 이것을 달성하기 위해 삭제해야하므로 다음과 같은 솔루션도 될 경우

key | jobid  | files     | 
-------------------------------------------- 
1  30012  file1.pdf 
2  30013  file3.pdf 
3  30014  file4.pdf 
4  30012  file2.pdf 
5  30014  file5.pdf 
6  30014  file6.pdf 

그것은 나던 문제 허용되는 파일 :

key | jobid  | files     | 
-------------------------------------------- 
4  30012  file1.pdf 
5  30013  file3.pdf 
6  30014  file4.pdf 
7  30012  file2.pdf 
8  30014  file5.pdf 
9  30014  file6.pdf 

기본적으로 나는 파일 분할이 필요합니다. 분리 문자 및 분리 된 문자열로 작성된 새로운 행이 있습니다.

제공 할 수있는 도움을 주시면 감사하겠습니다.

+0

나는 일회성 직업이라고 이해합니다. 맞죠? –

+0

가능한 [Mysql string split] (http://stackoverflow.com/questions/6152137/mysql-string-split) 중복 –

+1

예 Eugen 그것의 한 시간 직업. – user1132038

답변

0

PHP에서 (가정 $의 DB는 유효한 DB 연결이며 key는 AUTO_INCREMENT입니다) :

$sql="select `key`, jobid, files from filestable where files like '%\\;%'"; 
$qry=mysql_query($sql,$db); 

$sql=array(); 
while (true) { 
    $row=mysql_fetch_row($qry); 
    if (!$row) break; 

    $key=$row[0]; 
    $jobid=$row[1]; 
    $files=explode(';',$row[2]); 
    foreach ($files as $file) { 
    $file=mysql_real_escape_string($file,$db); 
    $sql[]="insert into filestable (jobid,files) values ($jobid,'$file')"; 
    } 
    $sql[]="delete from filestables where `key`=$key"; 
} 

현재 SQL 실행 SQL 문의 배열을 가지고 $ - 중 while 루프의 끝에서 실행할 , 또는 일괄 적으로 배치하여로드 패턴에 맞는 것이 든 나중에 작성하십시오.

+0

SQL 문에 와일드 카드를 추가하고 "삽입 행에 추가하는 것 외에도 완벽하게 작동했습니다."고맙습니다. – user1132038

+0

좋은 캐치, 누락 된 견적과 와일드 카드를 수정했습니다. 죄송합니다. +1을 입력하는 동안 +1 " –

+0

질문은 SQL에서 그것을하는 방법입니다. – reinierpost

관련 문제