Как я могу SELECT
использовать последнюю строку в таблице MySQL?
Я INSERT
данные, и мне нужно получить значение столбца из предыдущей строки.
В таблице есть auto_increment
.
Как я могу SELECT
использовать последнюю строку в таблице MySQL?
Я INSERT
данные, и мне нужно получить значение столбца из предыдущей строки.
В таблице есть auto_increment
.
Да, там есть auto_increment
Если вы хотите получить последнюю из всех строк в таблице, то это, наконец, время, когда MAX(id)
- правильный ответ! Вид:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
Имейте в виду, что таблицы в реляционных базах данных - это всего лишь множество строк. И в математике - неупорядоченные коллекции. Нет ни первой, ни последней строки; нет предыдущей строки или следующей строки.
Сначала вам нужно отсортировать свой набор неупорядоченных строк с помощью некоторого поля, а затем вы освободите итерацию по набору результатов в указанном вами порядке.
Поскольку у вас есть поле с добавлением auto, я предполагаю, что вы хотите, чтобы это поле сортировки. В этом случае вы можете сделать следующее:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Посмотрите, как мы сначала сортируем набор неупорядоченных строк с помощью your_auto_increment_field
(или того, что вы назвали) в порядке убывания. Затем мы ограничиваем набор результатов только первой строкой с помощью LIMIT 1
.
на таблицах со многими строками есть два запроса, вероятно, быстрее...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Вы можете комбинировать два запроса, предлагаемые @spacepille, в один запрос, который выглядит так:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Он должен работать быстро, но на INNODB-таблицах это доля милисекунды медленнее, чем ORDER + LIMIT.
Сделайте это просто: PDO::lastInsertId
Если вы хотите добавить последнее, добавьте отметку времени и выберите упорядоченное в обратном порядке наивысшую отметку времени, лимит 1. Если вы хотите пойти по ID, сортируйте по ID. Если вы хотите использовать ту, которую вы просто добавили, используйте mysql_insert_id
.
SELECT * FROM adds where id=(select max(id) from adds);
Этот запрос использовался для извлечения последней записи в вашей таблице.
Вы можете использовать OFFSET
в команде LIMIT
:
SELECT * FROM aTable LIMIT 1 OFFSET 99
если в вашей таблице 100 строк, это возвращает последнюю строку, не полагаясь на primary_key
Многие ответы здесь говорят то же самое (порядок по вашему автоинкременту), что нормально, если у вас есть автоинкрементный столбец, который проиндексирован.
Напомним, что если у вас есть такое поле, и оно является первичным ключом, то нет снижения производительности за использование 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
Почти в каждой таблице базы данных есть столбец auto_increment (обычно id)
Если вы хотите, чтобы последняя из всех строк в таблице,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
ИЛИ ЖЕ
Вы можете объединить два запроса в один запрос, который выглядит следующим образом:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);