代码之家  ›  专栏  ›  技术社区  ›  donohoe

将多个表移动到一个表中,并添加额外的字段值

  •  1
  • donohoe  · 技术社区  · 15 年前

    我在一个MySQL数据库中有31个独立的表(实际上我有365个表,但让我们简单点),每个表都包含一天的数据。这些表的名称(不正确)是以当天为基础的。

    例子:

    island01Aug07
    island02Aug07
    island03Aug07
    island04Aug07
    ...
    island31Aug07
    

    我想将所有表合并为一个主表:

    island_08
    

    使用起来很简单 插入 但我的问题是,表中没有列来表示日期。必须将它添加到目标表中,然后在移动/复制表时需要填充它。

    欢迎提出建议、建议和解决方案。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Quassnoi    15 年前
    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
    …
    
        2
  •  1
  •   Nazariy    15 年前

    作为替代选项,您可以在中列出所有表,如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