我有这个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的自动增量编号。
答案 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。