如何在循环内的同一表和列中插入last_insert_id

时间:2019-05-17 04:48:24

标签: php mysql

目前,我的表名称路由的列如下所示

  • id
  • 名称
  • master_id

我想做的是将第一个insertd_id插入具有相同值的master_id中。该查询将在循环中运行,就像此示例一样,它将运行4次。示例:

+-----+------+-----------+
| id  | name | master_id |
+-----+------+-----------+
| 625 |name_1|    625    |
| 626 |name_3|    625    |
| 627 |name_3|    625    |
| 628 |name_4|    625    |

我的参考资料和我尝试过的内容 Can't run Insert and Select LAST_INSERT_ID() in the same query?

for ($i = 0; $i <= $array_length - 1; $i++){
   for($j = $i + 1; $j < $array_length; $j++){
     $select_last_inserted_id = $con->query("select LAST_INSERT_ID() as last_insert_id from routes");
     $last_insert_id = mysqli_fetch_assoc($select_last_inserted_id);
     $routes = "insert into routes(name, master_id) values('$name',".$last_insert_id['last_insert_id'].")";
    }
}

我当前的结果(错误的一个)

+-----+------+-----------+
| id  | name | master_id |
+-----+------+-----------+
| 625 |name_1|    0      |
| 626 |name_3|    625    |
| 627 |name_3|    626    |
| 628 |name_4|    627    |

1 个答案:

答案 0 :(得分:0)

您可以在一个查询中使用两个语句

INSERT INTO routes(name) values('name')

UPDATE routes set master_id = (select max(id) from routes) 
where id = (select max(id) from routes) 

首先,它将以递增的id插入新行,然后以master_id更新max(id)
更新
根据您在queston中的最新更新,首先,您需要在foreach循环中插入一行,并通过php获取其最后插入的ID,然后在那里更新该行。然后在循环中添加插入查询,该查询带有您先前在master_id列中获得的最后插入的ID。就这样