在一个查询中多次INSERT INTO但更改了一个字段

时间:2015-01-07 11:10:36

标签: php mysql insert-update

我想用多个引擎创建一个程序,每个引擎都可以包含一些元素,所以我创建了一个包含三个表的数据库:

  • 引擎(engine_id,engine_name,...)
  • 元素(element_id,element_name,...)
  • Selected_Elements(selected_element_id, engine_id element_id

然后,用户可以创建新引擎或加载一个,添加或删除此引擎的某些元素,并创建新元素(或编辑旧元素)。现在,当用户创建新引擎时,他可以决定从另一个引擎启动。

在Engine表中,只需要创建一个具有相同名称,描述,......的新引擎。 但是我不知道如何在Selected_elements中添加旧引擎的selected_elements但是使用新的引擎ID。我想做这样的事情:

// I have 2 entries $_POST["engine_name"] (the new name for the new engine) and ["_template_engine_id"] wich contains the id of the old engine to copy

// Create the new engine && get the id
$request = "INSERT INTO engine(name) VALUES (".$_POST["engine_name"].")";
$database->exec($request);  
$id = $database->lastInsertId();

// Duplicate all selected_elements with old engine_id 
$request =  "INSERT INTO selected_elements(engine_id,element_id) SELECT ".$id.", element_id FROM selected_elements where engine_id = ".$_POST["_template_engine_id"];

最后一个$request是本主题的主题,我想“复制”所有旧引擎选择元素并给它们new-engine_id。我不知道怎么做,因为我很确定这种方式是错误的^^'

是否可能以及如何?

1 个答案:

答案 0 :(得分:0)

由于新引擎需要复制更多selected个元素,因此您无法将它们插入到单个实例中。这样做:

    // fetch all elements from the old engine
    $query = "SELECT * FROM selected_elements where engine_id = ".$_POST['_template_engine_id'];    

    $rows = $database->exec($query)->fetch_assoc(); 
    // or whatever your fetch handle is 
    foreach ($rows as $row) {

        // add old element_id to new engine $id
        $request =  "INSERT INTO selected_elements(engine_id,element_id) VALUES ('".$id."','".$row['element_id']."')";
        $database->exec($request);

    }