2013-10-10 3 views
0

Давайте просто скажем, что у меня есть две таблицы.Несколько SQL запросов SQL

Первый:

id thing1 thing2 

Второе:

id_fo other_thing 

, где id_fo зависит от первой одной таблицы.

Мне нужно вставить thingS в обе таблицы, но в php mysql request (например, pdo), как я могу получить весь последний идентификатор вставки?

Я имею в виду, если бы у меня было 30 строк в одном запросе, у меня будет 30 новых идентификаторов.

Как я могу выполнить второй запрос SQL?

+0

Вы должны быть более явным ... Вы можете переформулировать вопрос или дать пример того, что вам нужно ... – Nathan

+0

Не может быть более явным, чем это. Если я добавлю 30 строк в первую таблицу, как я могу получить весь идентификатор. – 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 (thing1, thing2) VALUES ('test', 'test'), ('test2', 'test2'). Но почему бы не все – Cherche

+0

, так что вам нужно вставить идентификаторы в виде массива или что-то .. ??? – 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); 
} 
Смежные вопросы