last_insert_id - php net insert into mysql
LAST_INSERT_ID() MySQL (9)
Tengo una pregunta de MySQL que creo que debe ser bastante fácil. Necesito devolver el ID ÚLTIMO INSERTADO de la tabla 1 cuando ejecuto la siguiente consulta MySql:
INSERT INTO table1 (title,userid) VALUES (''test'',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();
Como puede comprender, el código actual simplemente devolverá el ID de ÚLTIMO INSERTO de tabla2 en lugar de tabla1, ¿cómo puedo obtener el ID de tabla1 incluso si lo inserté en la tabla 2?
¿Sería posible guardar la variable last_id_in_table1 en una variable php para usarla más tarde?
Con este last_id necesito adjuntar algunos registros en otra tabla con este last_id, entonces necesito:
1) Haz un INSERTO y obtén el last_id_in_table1
INSERT into Table1(name) values ("AAA");
SET @last_id_in_table1 = LAST_INSERT_ID();
2) Para cualquier fila indeterminada en otra tabla, ACTUALIZAR estas filas con last_id_insert generado en la inserción.
$element = array(some ids)
foreach ($element as $e){
UPDATE Table2 SET column1 = @last_id_in_table1 WHERE id = $e
}
Esto le permite insertar una fila en 2 tablas diferentes y también crea una referencia a ambas tablas.
START TRANSACTION;
INSERT INTO accounttable(account_username)
VALUES(''AnAccountName'');
INSERT INTO profiletable(profile_account_id)
VALUES ((SELECT account_id FROM accounttable WHERE account_username=''AnAccountName''));
SET @profile_id = LAST_INSERT_ID();
UPDATE accounttable SET `account_profile_id` = @profile_id;
COMMIT;
Para último y segundo último:
INSERT INTO `t_parent_user`(`u_id`, `p_id`) VALUES ((SELECT MAX(u_id-1) FROM user) ,(SELECT MAX(u_id) FROM user ) );
Puede almacenar la última identificación de inserción en una variable:
INSERT INTO table1 (title,userid) VALUES (''test'', 1);
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO table2 (parentid,otherid,userid) VALUES (@last_id_in_table1, 4, 1);
O obtenga la máxima id frm table1
INSERT INTO table1 (title,userid) VALUES (''test'', 1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(), 4, 1);
SELECT MAX(id) FROM table1;
Si necesita tener de mysql, después de su consulta, la última identificación autoincremental sin otra consulta, ingrese su código:
mysql_insert_id();
Solo para agregar para la publicación de Rodrigo, en lugar de LAST_INSERT_ID () en la consulta puede usar SELECT MAX (id) FROM table1 ;, pero debe usar (),
INSERT INTO table1 (title,userid) VALUES (''test'', 1)
INSERT INTO table2 (parentid,otherid,userid) VALUES ( (SELECT MAX(id) FROM table1), 4, 1)
Solo tenemos una persona ingresando registros, por lo que ejecuto la siguiente consulta inmediatamente después de la inserción:
$result = $conn->query("SELECT * FROM corex ORDER BY id DESC LIMIT 1");
while ($row = $result->fetch_assoc()) {
$id = $row[''id''];
}
Esto recupera la última identificación de la base de datos.
Tuve el mismo problema en bash y estoy haciendo algo como esto:
mysql -D "dbname" -e "insert into table1 (myvalue) values (''${foo}'');"
que funciona bien :-) Pero
mysql -D "dbname" -e "insert into table1 (myvalue) values (''${foo}'');set @last_insert_id = LAST_INSERT_ID();"
mysql -D "dbname" -e "insert into table2 (id_tab1) values (@last_insert_id);"
no funciona Porque después del primer comando, el shell se cerrará la sesión de mysql y se registrará de nuevo para el segundo comando, y luego la variable @last_insert_id ya no se establece. Mi solución es:
lastinsertid=$(mysql -B -N -D "dbname" -e "insert into table1 (myvalue) values (''${foo}'');select LAST_INSERT_ID();")
mysql -D "dbname" -e "insert into table2 (id_tab1) values (${lastinsertid});"
Tal vez alguien está buscando una solución y un golpe :-)
Ya que almacenó el LAST_INSERT_ID () anterior en la segunda tabla, puede obtenerlo desde allí:
INSERT INTO table1 (title,userid) VALUES (''test'',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT parentid FROM table2 WHERE id = LAST_INSERT_ID();