为了账号安全,请及时绑定邮箱和手机立即绑定

MYSQL如何插入下一列ID

MYSQL如何插入下一列ID

PHP
侃侃尔雅 2023-08-19 16:40:30
我有下表:RowID | name | prev_row | next_row-------------------------------0  | test | NULL     | NULL1  | test | NULL     | NULL2  | test | NULL     | NULL3  | test | NULL     | NULL4  | test | NULL     | NULL5  | test | NULL     | NULL--$stmt = $pdo->prepare("INSERT INTO row (name, prev_row, next_row) VALUES (:name, :prevRow, :nextRow);foreach ($rows as $row) {   $stmt->bindParam(":name", $row->getName());   $stmt->bindParam(":prevRow", ????????????);   $stmt->bindParam(":nextRow", ????????????);   $stmt->execute();}如何填充上一行和下一行参数?前一行是 for 循环中当前行之前插入的行的 ID。下一行是将在 for 循环中当前行之后插入的行的 ID。我知道我可以对前一行执行此操作:$stmt = $pdo->prepare("INSERT INTO row (name, prev_row, next_row) VALUES (:name, :prevRow, :nextRow);foreach ($rows as $row) {   $stmt->bindParam(":name", $row->getName());   $stmt->bindParam(":prevRow", $pdo->lastInsertID());   $stmt->bindParam(":nextRow", ????????????);   $stmt->execute();}但我不知道如何获得下一行,因为它尚未创建。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

您无法获取下一个 id,您可以做的是执行不带 :nextRow (null 或其他临时值)的 INSERT,存储插入行的 id 并在下一个循环中运行插入新行并用此更新上一个行新行 ID 作为 nextRow。


像这样的东西:


<?php


$stmt = $pdo->prepare("INSERT INTO row (name, prev_row, next_row) VALUES (:name, :prevRow, :nextRow");


$stmtUpdate = $pdo->prepare("UPDATE row SET next_row = :nextRow WHERE id = :id");


$previousId = null;

foreach ($rows as $row) {

   // insert current row without nextRow

   $stmt->bindParam(":name", $row->getName());

   $stmt->bindParam(":prevRow", $pdo->lastInsertID());

   $stmt->bindParam(":nextRow", null);

   $stmt->execute();


   if ($previousId) {

     // update previous row with this rows id as its nextRow

     $stmtUpdate->bindParam(":nextRow", $pdo->lastInsertId());

     $stmtUpdate->bindParam(":id", $previousId);

     $stmtUpdate->execute();

   }


   $previousId = $pdo->lastInsertID();

}

这也是有道理的,因为您插入的最后一行不会有nextRow


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信