2009-11-10 38 views
1

我有31個獨立的表格(實際上我有365個,但讓我們保持這個簡單)在MySQL數據庫中,每個數據庫包含給定日期的數據。這些表格(嚴重地)根據當天命名。將多個表格合併爲一個,並添加額外字段值

例子:

island01Aug07 
island02Aug07 
island03Aug07 
island04Aug07 
... 
island31Aug07 

我想所有的表合併爲一個主表:

island_08 

這將是簡單的使用INSERT INTO但我的問題是,表沒有專欄來表示這一天。它必須被添加到目標表中,然後當移動/複製表格時需要填充該表格。

歡迎提出建議,建議和解決方案。

回答

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

@邁克爾:你可能想要寫一個小腳本,你的表名加工成正確的SQL字符串,從而避免在'SELECT'2007-07-01'...'上輸入變化365次。運行生成的SQL。 – dnagirl 2009-11-10 18:47:17

+0

雖然有其他建議的解決方案的優點(將作業分解爲更小的批次),但它只需很少的修改(表名等) – donohoe 2009-11-11 01:33:40

1

作爲替代選擇可以通過循環後列出的所有表中,以陣列狀TABLE_NAME => 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 
相關問題