MySQL插入基于现有值进行选择

时间:2014-08-12 13:40:48

标签: php mysql pdo

我有一个方法可以为我们在任务管理系统中创建的每个新项目创建重复(默认)值。目前,它基于default = 1 SELECT查询运行多个循环,然后根据默认值插入新行。必须在新项目上复制这些值(不同)。

我个人认为它使用了大量不必要的开销,可以调整为更有效地工作,尤其是查看INSERT SELECT查询,但我不知道如何处理这个问题。

 public function copyProductDefaults($productID, $userID) {
    // Run loop for tasks categories:
    $sql = "SELECT `name`,`description` FROM `tasks_categories` WHERE `default`=1";
    $rows = $this->get($sql, array());
    foreach ($rows AS $row) {
        $sql = "INSERT INTO `tasks_categories` (`name`,`description`,`product_id`,`user_id`,`default`,`create_date`) VALUES (?,?,?,?,?,NOW())";
        $this->insert($sql, array($row['name'], $row['description'], $productID, $userID,0));
    }

    // Run loop for tasks types:
    $sql = "SELECT `name` FROM `tasks_types` WHERE `default`=1";
    $rows = $this->get($sql, array());
    foreach ($rows AS $row) {
        $sql = "INSERT INTO `tasks_types` (`name`,`product_id`,`user_id`,`default`,`create_date`) VALUES (?,?,?,?,?,NOW())";
        $this->insert($sql, array($row['name'], $productID, $userID,0));
    }

    // Run loop for tasks statuses:
    $sql = "SELECT `name` FROM `tasks_statuses` WHERE `default`=1";
    $rows = $this->get($sql, array());
    foreach ($rows AS $row) {
        $sql = "INSERT INTO `tasks_statuses` (`name`,`product_id`,`user_id`,`default`,`create_date`) VALUES (?,?,?,?,?,NOW())";
        $this->insert($sql, array($row['name'], $productID, $userID,0));
    }

    return true;
}

1 个答案:

答案 0 :(得分:0)

这是你在找什么?

INSERT INTO task_categories (name,description,product_id,user_id,`default`,create_date)
    SELECT name,description,?,?,0,now() FROM task_categories WHERE `default`=1

(和其他两个相同)。