Selecione a última linha no MySQL

Como posso SELECT a última linha em uma tabela MySQL?

Estou INSERT dados e preciso recuperar um valor de coluna da linha anterior.

Há um auto_increment na tabela.

Sim, há um auto_increment lá

Se você quiser a última de todas as linhas na tabela, então esta é finalmente a hora em que MAX(id) é a resposta certa! Mais ou menos:

 SELECT fields FROM table ORDER BY id DESC LIMIT 1; 

Tenha em mente que as tabelas em bancos de dados relacionais são apenas conjuntos de linhas. E conjuntos em matemática são collections não ordenadas. Não há primeira ou última linha; sem linha anterior ou linha seguinte.

Você terá que classificar seu conjunto de linhas não ordenadas por algum campo primeiro e, em seguida, liberar a iteração pelo conjunto de resultados na ordem definida.

Como você tem um campo de incremento automático, suponho que você queira que seja o campo de sorting. Nesse caso, você pode querer fazer o seguinte:

 SELECT * FROM your_table ORDER BY your_auto_increment_field DESC LIMIT 1; 

Veja como primeiro classificamos o conjunto de linhas não ordenadas pelo your_auto_increment_field (ou qualquer nome que você tenha chamado) em ordem decrescente. Em seguida, limitamos o conjunto de resultados apenas à primeira linha com LIMIT 1 .

em tabelas com muitas linhas são duas consultas provavelmente mais rápidas …

 SELECT @last_id := MAX(id) FROM table; SELECT * FROM table WHERE id = @last_id; 

Você pode combinar duas consultas sugeridas pelo @spacepille em uma única consulta semelhante a esta:

 SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`); 

Deve funcionar muito rápido, mas nas tabelas INNODB é uma fração de milissegundo mais lenta que ORDER + LIMIT.

Faça simplesmente usar: PDO::lastInsertId

http://php.net/manual/en/pdo.lastinsertid.php

Se você deseja adicionar o mais recente, adicione um registro de data e hora e selecione o pedido em ordem inversa pelo registro de data e hora mais alto, limite 1. Se você quiser ir por ID, classifique por ID. Se você quiser usar o que você acabou de adicionar, use mysql_insert_id .

 SELECT * FROM adds where id=(select max(id) from adds); 

Essa consulta costumava buscar o último registro na sua tabela.

Você pode usar um OFFSET em um comando LIMIT :

 SELECT * FROM aTable LIMIT 1 OFFSET 99 

caso sua tabela tenha 100 linhas, retorne a última linha sem depender de uma primary_key