2009-11-10 2 views
1

31 개의 개별 테이블 (실제로는 365이지만이 단순하게 유지할 수 있음)은 MySQL 데이터베이스에 있으며 각 테이블에는 주어진 날짜의 데이터가 들어 있습니다. 테이블은 하루를 기준으로 (잘못) 명명됩니다.여분의 필드 값 추가로 복수 테이블 이동

예 :

island01Aug07 
island02Aug07 
island03Aug07 
island04Aug07 
... 
island31Aug07 

나는 하나 개의 마스터 테이블에 모든 테이블을 결합하고 싶습니다 :

island_08 

INTO INSERT를 사용하는 것이 간단하지만 것입니다 내 문제는 테이블입니다 그 날을 나타내는 열이 없다. 대상 테이블에 추가해야 할 것입니다. 그리고 나서 테이블을 이동/복사 할 때 채울 필요가 있습니다.

제안, 조언 및 해결책을 환영합니다.

답변

1
CREATE TABLE island_08 (mydate DATE NOT NULL, field1 …) 

INSERT 
INTO  island_08 (mydate, field1, field2) 
SELECT '2007-07-01', field1, field2 
FROM island01Aug07 
UNION ALL 
SELECT '2007-07-02', field1, field2 
FROM island02Aug07 
UNION ALL 
… 
+1

@michael : 올바른 SQL 문자열에 테이블 이름을 처리하고 그래서 피하기 위해 작은 스크립트를 작성 할 수 있습니다 'SELECT '에 변형을 입력 2007-07-01'... '365 번. 결과 SQL을 실행하십시오. – dnagirl

+0

제안 된 다른 솔루션 (작은 배치로 나누는 작업)에 장점이 있지만 최소한의 수정만으로 매력을 발휘했습니다 (테이블 이름 등) – donohoe

1

대체 옵션으로 당신을 통해 그 루프 후 테이블 _ => mysql_date 같은 배열 에있는 모든 테이블을 나열 할 수 있습니다 하나 개의 테이블에서 데이터를 복사하여 다른에 삽입합니다. 데이터가 성공적으로 전송 된 후 테이블을 제거 할 수 있습니다. 여기

테이블의 목록을 얻고 그것에서 날짜를 추출하는 예입니다

$prefix = 'island'; 
$lenght = strlen($prefix); 

$result = $this->query("SHOW TABLES LIKE '{$prefix}%'"); 

$arrayDates = array(); 

if($db->num_rows($result)) 
{ 
    while($v = $db->fetch_array($result)) 
    { 
     $mysql_table = current($v); 

     $arrayDates[$mysql_table] = date('d-m-Y',strtotime(substr($mysql_table,0,$lenght)));  
    } 
} 
//Now you can walk through your array and copy data from one table tyo another and append you mysql value