0

我有这个 SQL 查询:

INSERT INTO db1.outbox (DestinationNumber, TextDecoded)
SELECT User.CellPhone, '$SMSMessage' as TextDecoded
FROM db2.User
WHERE User.PurchaseDate BETWEEN 2012-01-01 AND 2012-01-31

它对“发件箱”表进行多行插入。我可以使用以下查询轻松获取第一行的 ID 号:

SELECT LAST_INSERT_ID()

假设我有 532 作为结果,SELECT LAST_INSERT_ID()并且我插入了 34 行。

如何将此 532 用作其他名为“outbox_multipart”插入的表的初始编号并使其自动递增,因此结果将如下所示:

+------+----------------+----------+----------------------------------+
| ID   | phonenumber    | outboxID | message                          |
+------+----------------+---------------------------------------------+
|                      ......                                         |
| 1025 | 555-123456     | 532      | part 2 : hello there!            |
| 1026 | 555-999999     | 533      | part 2 : hello there!            |
| 1027 | 555-888888     | 534      | part 2 : hello there!            |
|                                                                     |
|               ...... 34 rows inserted here .......                  |
|                                                                     |
+------+----------------+---------------------------------------------+ 

请注意,outboxID 列不是自动递增列。但它必须具有 532 + 34 行 = 566 的自动增量编号。

4

2 回答 2

2

试试这个

ALTER TABLE outbox_multipart AUTO_INCREMENT = 532;

它将从 532 递增,

并记住“outboxID”最初也应该是自动递增的

于 2012-09-27T04:17:56.073 回答
0

使用 for 循环结合 mysql 中受影响的行数怎么样?如果您使用的是 PDO(我推荐),您可以使用此 http://php.net/manual/en/pdostatement.rowcount.php

所以它看起来像这样。

<?php 

 $dbh = new pdo (your_database_connection_details);
 $stmt = dbh->prepare() //do your initial insert into the outbox table
 $stmt->bindParams() //bind your parameters
 $stmt->execute();

 $out_box_id =  dbh->lastInsertId();
 $row_count = dbh->rowCount();

for(x=0;x<$row_count;x++){   
  //insert $out_box_id into the outboxID column
  $stmt->execute();
  $out_box_id = $out_box_id + 1;
 }

所以这应该抓住你第一次插入的最后一个插入的 id 并将 $out_box_id 设置为它。然后你可以在你的 for 循环中插入 $out_box_id 。循环运行多次插入的行数,然后在每个循环结束时它将 out_box_id 增加一。

于 2012-09-27T04:39:09.617 回答