复制多个MySql行

时间:2014-01-12 10:43:47

标签: mysql codeigniter activerecord copy row

我在mysql-table mytable中公开行并稍微更新profiles_id - 列。 有很多行需要进行更新和更新。

有时我收到一个MYSQL错误:TMP table already exists我无法弄清楚为什么甚至在命令中重新创建错误。想法?改进措施?

(我正在运行CodeIgniter的Active Record以下内容)

    $where = '';

    foreach($vars as $var) { 

       $where .= "id = '$var->id' OR ";
    }

    $where = substr($where , 0, -4);

    $this->db->query("CREATE TEMPORARY TABLE tmp SELECT * from mytable WHERE ( " . $where . " ) && users_id = '$user_id';");
    $this->db->query("ALTER TABLE tmp drop id;");
    $this->db->query("UPDATE tmp SET profiles_id = '$profile_id';");
    $this->db->query("INSERT INTO mytable SELECT 0,tmp.* FROM tmp; ");
    $this->db->query("DROP TABLE tmp;");

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。发送查询并发生错误时,不执行最后一个查询DROP TABLE tmp。这个临时表一直存在,直到DB连接断开。

    $this->db->query("DROP TEMPORARY TABLE IF EXISTS tmp;");
    $this->db->query("CREATE TEMPORARY TABLE tmp SELECT * from mytable WHERE ( " . $where . " ) && users_id = '$user_id';");
    $this->db->query("ALTER TABLE tmp drop id;");
    $this->db->query("UPDATE tmp SET profiles_id = '$profile_id';");
    $this->db->query("INSERT INTO mytable SELECT 0,tmp.* FROM tmp; ");
    $this->db->query("DROP TABLE tmp;");

所以通过在开头添加DROP IF EXISTS,这就解决了。