2012-09-27 49 views
0

我有這樣的SQL查詢:MySQL的:將數據帶單查詢,但自動增量號在非自動遞增列

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

回答

2

嘗試用這種

ALTER TABLE outbox_multipart AUTO_INCREMENT = 532; 

它將從532遞增,

,並記住了「outboxID」也應該是在自動增量最初

+0

如何阻止它直到34行?或者當沒有插入其他行時它會自動停止,這樣當我有另一個插入過程時,比方說,從821開始......我必須再次使用ALTER TABLE,但是這次以821開始。那是什麼意思?對我來說是有意義的...... –

+0

一旦你執行了這個查詢,那麼它不是那樣的,那麼它最初從532開始,如果你的插入從821開始,那麼它會自動遞增821的「outboxID」,否則它會開始從532 + 34 =「566」 – Gautam3164

+0

好的,明白了......爲你+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。