¿Cómo puedo SELECT
la última fila en una tabla MySQL?
Estoy INSERT
ingresando datos y necesito recuperar un valor de columna de la fila anterior.
Hay un auto_increment
en la mesa.
auto_increment
ahí dentro. Me gustaría la más reciente.
¿Cómo puedo SELECT
la última fila en una tabla MySQL?
Estoy INSERT
ingresando datos y necesito recuperar un valor de columna de la fila anterior.
Hay un auto_increment
en la mesa.
auto_increment
ahí dentro. Me gustaría la más reciente.
Respuestas:
Sí, hay un auto_increment allí
Si desea la última de todas las filas de la tabla, ¡este es finalmente el momento en que MAX(id)
es la respuesta correcta! Mas o menos:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
está indexado.
Tenga en cuenta que las tablas en las bases de datos relacionales son solo conjuntos de filas. Y los conjuntos de matemáticas son colecciones desordenadas. No hay primera o última fila; sin fila anterior o siguiente fila.
Primero tendrá que ordenar su conjunto de filas desordenadas por algún campo, y luego podrá liberar la iteración a través del conjunto de resultados en el orden que definió.
Como tiene un campo de incremento automático, supongo que desea que ese sea el campo de clasificación. En ese caso, es posible que desee hacer lo siguiente:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Vea cómo primero estamos ordenando el conjunto de filas desordenadas por your_auto_increment_field
(o como se llame) en orden descendente. Luego limitamos el conjunto de resultados a solo la primera fila con LIMIT 1
.
Puede combinar dos consultas sugeridas por @spacepille en una sola consulta que se vea así:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Debería funcionar muy rápido, pero en las tablas INNODB es una fracción de milisegundo más lento que ORDER + LIMIT.
answered Jun 14 at 9:41
en tablas con muchas filas hay dos consultas probablemente más rápidas ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Haz que simplemente use: PDO::lastInsertId
Casi todas las tablas de la base de datos, hay una columna auto_increment (generalmente id)
Si desea la última de todas las filas de la tabla,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
O
Puede combinar dos consultas en una sola consulta que se vea así:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Esta consulta solía buscar el último registro en su tabla.
Muchas respuestas aquí dicen lo mismo (ordenar por su incremento automático), lo cual está bien, siempre que tenga una columna autoincrementada que esté indexada.
En una nota al margen, si tiene ese campo y es la clave principal, no hay penalización de rendimiento por usar order by
versus select max(id)
. La clave principal es cómo se ordenan los datos en los archivos de la base de datos (al menos para InnoDB), y el RDBMS sabe dónde terminan esos datos, y puede optimizar order by id + limit 1
para que sean los mismos que alcanzarmax(id)
Ahora el camino menos transitado es cuando no tiene una clave primaria autoincrementada. Quizás la clave primaria es una clave natural, que es un compuesto de 3 campos ... Sin embargo, no todo está perdido. Desde un lenguaje de programación, primero puede obtener el número de filas con
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
y luego use el número obtenido en la LIMIT
cláusula
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Desafortunadamente, MySQL no permitirá una subconsulta o una variable de usuario en la LIMIT
cláusula