MySQL:使用单个查询插入数据,但在非自动增量列上自动递增数字

时间:2012-09-27 04:14:24

标签: php mysql

我有这个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

它会在'outbox'表中插入多行。我可以使用此查询轻松获取第一行的ID号:

SELECT LAST_INSERT_ID()

让我说SELECT LAST_INSERT_ID()的结果为532,我插入了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的自动增量编号。

2 个答案:

答案 0 :(得分:2)

试试这个

ALTER TABLE outbox_multipart AUTO_INCREMENT = 532;

它将从532增加,

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

答案 1 :(得分: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增加1。