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

Multiple INSERT INTO in one query but with a change of one field

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

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

在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是本题的主题,我想"duplicate"所有old-engine-selected-elements,给他们new-engine_id。我不知道该怎么做,因为我很确定这种方式是错误的^^'

这可能吗?如何实现?

由于需要为新引擎复制更多 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);

    }