2013-10-10 96 views
0

讓我們只是說我有兩個表。多個ID SQL查詢

第一個:

id thing1 thing2 

第二種:

id_fo other_thing 

其中id_fo取決於從第一個表。

我必須在這兩個表中插入thingS,但在php mysql請求(例如pdo)中,如何獲取所有最後一個插入ID?

我的意思是,如果我在一個查詢中有30行,我將有30個新的ID。

我該如何做第二次SQL查詢?

+0

你需要更明確的...你可能要重新制定問題或舉例說明你需要什麼...... – Nathan

+0

不能比這更明確。如果我在第一個表格中添加30行,我如何獲取所有ID。 – Cherche

回答

1

在的僞代碼:

Start transaction 
    insert into table1 (thing1, thing2) values (thingS,thingS2) 
    lastidtable1 = lastinsertedid(); 
    insert into table2 (id_fo, other_thing) values (lastidtable1,thingS); 
    lastidtable2 = lastinsertedId(); 
commit; 

每個上述各行的應PHP代碼它調用的查詢。

0

INSERT和UPDATE不返回任何數據集,您可以添加帶有時間戳類型的INSERTED列,將DEFAULT設置爲CURRENT_TIMESTAMP並選擇具有最大時間戳值的所有行。

1

你在找這樣的嗎?

$main_data = array('dino', 'babu', 'john'); 

    foreach($main_data as $main) { 

     // Insert main to 1st table 
     mysql_query("MY INSERT QUERY TO TABLE 1"); 

     // Get the last insert id 
     $new_id = mysql_insert_id(); 

     // Insert the sub data to 2nd table using the insert id 
     mysql_query("MY INSERT QUERY TO TABLE 2 USING $new_id "); 
    } 
+0

那麼,只要你需要一次插入許多查詢,這種請求就是痛苦的。想象一下像這樣INSERT INTO table(thing1,thing2)VALUES('test','test'),('test2','test2')。但爲什麼畢竟 – Cherche

+0

所以你需要插入ID作爲數組或東西..? – Dino

0

,如果你能保證只有一個插入過程中不停地換着時間,你可以做這樣的事情的僞代碼:

$max1=select max(id) as max1 from table; 
insert into table .... 
$num_inserted_rows=number of inserted rows. 
$max2=select max(id) as max2 from table; 
if(($max2-$max1) == $num_inserted_rows){ 
    $lastid=select last_insert_id(); 
    $inserted_ids=range($lastid-$num_inserted_rows,$lastid); 
}