Como posso SELECT
a última linha em uma tabela MySQL?
Estou INSERT
inserindo dados e preciso recuperar um valor da coluna da linha anterior.
Há um auto_increment
na mesa.
auto_increment
lá dentro. Eu gostaria do mais recentemente adicionado.
Como posso SELECT
a última linha em uma tabela MySQL?
Estou INSERT
inserindo dados e preciso recuperar um valor da coluna da linha anterior.
Há um auto_increment
na mesa.
auto_increment
lá dentro. Eu gostaria do mais recentemente adicionado.
Respostas:
Sim, há um incremento automático lá
Se você deseja a última de todas as linhas da tabela, este é finalmente o momento em que MAX(id)
está a resposta certa! Mais ou menos:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
está indexado.
Lembre-se de que as tabelas nos bancos de dados relacionais são apenas conjuntos de linhas. E conjuntos em matemática são coleções não ordenadas. Não há primeira ou última linha; nenhuma linha anterior ou próxima linha.
Você precisará classificar seu conjunto de linhas não-ordenadas primeiro por algum campo e, em seguida, liberará a iteração pelo conjunto de resultados na ordem que você definiu.
Como você possui um campo de incremento automático, presumo que você queira que esse seja o campo de classificação. Nesse caso, você pode fazer o seguinte:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Veja como classificamos primeiro o conjunto de linhas não ordenadas pelo your_auto_increment_field
(ou como você o chamou) em ordem decrescente. Em seguida, limitamos o conjunto de resultados apenas à primeira linha com LIMIT 1
.
Você pode combinar duas consultas sugeridas por @spacepille em uma consulta semelhante à seguinte:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Ele deve funcionar rapidamente, mas nas tabelas INNODB é uma fração de milissegundo mais lento que ORDER + LIMIT.
answered Jun 14 at 9:41
é sobre 1 ano e 6 meses mais cedo :)
em tabelas com muitas linhas há duas consultas provavelmente mais rápidas ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Faça simplesmente usar: PDO::lastInsertId
Se você deseja adicionar o mais recente, adicione um registro de data e hora e selecione ordenado na ordem inversa pelo registro de data e hora mais alto, limite 1. Se você deseja selecionar por ID, classifique por ID. Se você deseja usar o que você acabou de adicionar, use mysql_insert_id
.
Quase todas as tabelas do banco de dados, há uma coluna auto_increment (geralmente id)
Se você deseja a última de todas as linhas da tabela,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
OU
Você pode combinar duas consultas em uma consulta que se parece com isso:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Esta consulta costumava buscar o último registro na sua tabela.
Muitas respostas aqui dizem o mesmo (ordem pelo seu incremento automático), o que é bom, desde que você tenha uma coluna com incremento automático indexada.
Em uma nota lateral, se você tiver esse campo e for a chave principal, não haverá penalidade no desempenho por usar order by
versus select max(id)
. A chave primária é como os dados são ordenados nos arquivos de banco de dados (pelo menos para o InnoDB), e o RDBMS sabe onde esses dados terminam e pode otimizar order by id + limit 1
para ser o mesmo que alcançar omax(id)
Agora, a estrada menos percorrida é quando você não possui uma chave primária com incremento automático. Talvez a chave primária seja uma chave natural, composta por 3 campos ... Porém, nem tudo está perdido. Em uma linguagem de programação, você pode obter primeiro o número de linhas com
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
e depois use o número obtido na LIMIT
cláusula
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Infelizmente, o MySQL não permitirá uma subconsulta ou variável de usuário na LIMIT
cláusula