Как я могу SELECT
последнюю строку в таблице MySQL?
Я INSERT
собираю данные, и мне нужно получить значение столбца из предыдущей строки.
Там auto_increment
в таблице.
auto_increment
есть. Я хотел бы, чтобы последний добавили один.
Как я могу SELECT
последнюю строку в таблице MySQL?
Я INSERT
собираю данные, и мне нужно получить значение столбца из предыдущей строки.
Там auto_increment
в таблице.
auto_increment
есть. Я хотел бы, чтобы последний добавили один.
Ответы:
Да, там есть авто_инкремент
Если вам нужна последняя из всех строк в таблице, то, наконец, настало время, когда MAX(id)
правильный ответ! Вид:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
индексируется.
Имейте в виду, что таблицы в реляционных базах данных - это просто наборы строк. И множества в математике являются неупорядоченными коллекциями. Нет первого или последнего ряда; нет предыдущего или следующего ряда.
Сначала вам нужно будет отсортировать набор неупорядоченных строк по какому-то полю, а затем освободить итерацию по набору результатов в указанном вами порядке.
Поскольку у вас есть поле с автоинкрементом, я предполагаю, что вы хотите, чтобы оно было полем сортировки. В этом случае вы можете сделать следующее:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Посмотрите, как мы вначале сортируем набор неупорядоченных строк по your_auto_increment_field
(или как бы вы это ни называли) по убыванию. Затем мы ограничиваем набор результатов только первой строкой LIMIT 1
.
Вы можете объединить два запроса, предложенных @spacepille, в один запрос, который выглядит следующим образом:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Он должен работать молниеносно, но в таблицах INNODB он на долю миллисекунды медленнее, чем ORDER + LIMIT.
answered Jun 14 at 9:41
примерно на 1 год и 6 месяцев раньше :)
для таблиц с большим количеством строк два запроса, вероятно, быстрее ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Сделать это просто используйте: PDO::lastInsertId
Если вы хотите добавить самую последнюю, добавьте временную метку и выберите упорядоченный в обратном порядке по самой высокой временной отметке, предел 1. Если вы хотите перейти по идентификатору, сортируйте по идентификатору. Если вы хотите использовать тот, который вы только что добавили, используйте mysql_insert_id
.
Почти в каждой таблице базы данных есть столбец auto_increment (обычно id)
Если вы хотите, чтобы последняя из всех строк в таблице,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
ИЛИ
Вы можете объединить два запроса в один запрос, который выглядит следующим образом:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
Многие ответы здесь говорят то же самое (порядок по вашему автоинкременту), что нормально, если у вас есть автоинкрементный столбец, который проиндексирован.
Напомним, что если у вас есть такое поле, и оно является первичным ключом, не будет никакого снижения производительности за использование по order by
сравнению с select max(id)
. Первичный ключ - это порядок упорядочения данных в файлах базы данных (по крайней мере, для InnoDB), и СУБД знает, где заканчиваются эти данные, и она может оптимизироваться так, order by id + limit 1
чтобы достигнутьmax(id)
Теперь дорога проходит меньше, когда у вас нет автоинкрементного первичного ключа. Может быть, первичный ключ - это естественный ключ, который состоит из 3 полей ... Однако не все потеряно. Из языка программирования вы можете сначала получить количество строк с
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
а затем использовать полученный номер в LIMIT
пункте
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
К сожалению, MySQL не позволит использовать подзапрос или пользовательскую переменную в LIMIT
предложении