Определите «последний ряд». Тот, у кого самый высокий ID? Или последний добавленный?
EboMike
1
Что указывает на последнюю строку - есть ли в таблице столбец auto_increment или DATETIME?
OMG Ponies
Да, там auto_incrementесть. Я хотел бы, чтобы последний добавили один.
esqew
9
Как говорят EboMike и OMG Ponies, в серии нет последней строки. Что бы вы сделали, если бы я дал вам мешок с шарами и попросил бы дать мне последний мяч?
Винсент Савард
Ответы:
402
Да, там есть авто_инкремент
Если вам нужна последняя из всех строк в таблице, то, наконец, настало время, когда MAX(id)правильный ответ! Вид:
Я боюсь, что это замедляется, если нужно отсортировать миллионы строк, не так ли?
Слава
2
Я просто пробежал 20 метров, и это было очень быстро. Я предполагаю, что есть какой-то особый случай для обработки этого запроса. (РЕДАКТИРОВАТЬ: MySQL 5.7, движок InnoDB)
Даниэль Бакмастер,
1
@Pekka: я не хочу использовать заказ, есть ли другой способ сделать это?
Шива
4
@ Слава Нет, если idиндексируется.
Маркиз Лорн
31
Имейте в виду, что таблицы в реляционных базах данных - это просто наборы строк. И множества в математике являются неупорядоченными коллекциями. Нет первого или последнего ряда; нет предыдущего или следующего ряда.
Сначала вам нужно будет отсортировать набор неупорядоченных строк по какому-то полю, а затем освободить итерацию по набору результатов в указанном вами порядке.
Поскольку у вас есть поле с автоинкрементом, я предполагаю, что вы хотите, чтобы оно было полем сортировки. В этом случае вы можете сделать следующее:
Посмотрите, как мы вначале сортируем набор неупорядоченных строк по your_auto_increment_field(или как бы вы это ни называли) по убыванию. Затем мы ограничиваем набор результатов только первой строкой LIMIT 1.
@karthikeyan написал свой ответ четыре дня назад, и я ответил на него в декабре 2015 года.
vzr
Нет, я редактировал и исправлял некоторые варианты написания 4 дня назад ... дата публикации - 2014 год, то есть answered Jun 14 at 9:41примерно на 1 год и 6 месяцев раньше :)
Dwza
Просто чтобы очистить воздух здесь взр прав. «14 июня» означает 14 июня 2016 года. @Karthikeyan является участником только в течение двух месяцев.
Роберт Брисита,
Ssooo ... Ответ @ karthikeyan является копией этого!
Клифф Бертон
24
для таблиц с большим количеством строк два запроса, вероятно, быстрее ...
SELECT@last_id := MAX(id)FROMtable;SELECT*FROMtableWHERE id =@last_id;
Правильно. У большинства приличных библиотек интерфейса MySQL есть специальные методы для этого, однако этот вопрос был не помечен как PHP, а как общий синтаксис MySQL.
vzr
4
Если вы хотите добавить самую последнюю, добавьте временную метку и выберите упорядоченный в обратном порядке по самой высокой временной отметке, предел 1. Если вы хотите перейти по идентификатору, сортируйте по идентификатору. Если вы хотите использовать тот, который вы только что добавили, используйте mysql_insert_id.
Многие ответы здесь говорят то же самое (порядок по вашему автоинкременту), что нормально, если у вас есть автоинкрементный столбец, который проиндексирован.
Напомним, что если у вас есть такое поле, и оно является первичным ключом, не будет никакого снижения производительности за использование по order byсравнению с select max(id). Первичный ключ - это порядок упорядочения данных в файлах базы данных (по крайней мере, для InnoDB), и СУБД знает, где заканчиваются эти данные, и она может оптимизироваться так, order by id + limit 1чтобы достигнутьmax(id)
Теперь дорога проходит меньше, когда у вас нет автоинкрементного первичного ключа. Может быть, первичный ключ - это естественный ключ, который состоит из 3 полей ... Однако не все потеряно. Из языка программирования вы можете сначала получить количество строк с
SELECT Count(*)-1ASrowcountFROM<yourTable>;
а затем использовать полученный номер в LIMITпункте
auto_increment
есть. Я хотел бы, чтобы последний добавили один.Ответы:
Если вам нужна последняя из всех строк в таблице, то, наконец, настало время, когда
MAX(id)
правильный ответ! Вид:источник
id
индексируется.Имейте в виду, что таблицы в реляционных базах данных - это просто наборы строк. И множества в математике являются неупорядоченными коллекциями. Нет первого или последнего ряда; нет предыдущего или следующего ряда.
Сначала вам нужно будет отсортировать набор неупорядоченных строк по какому-то полю, а затем освободить итерацию по набору результатов в указанном вами порядке.
Поскольку у вас есть поле с автоинкрементом, я предполагаю, что вы хотите, чтобы оно было полем сортировки. В этом случае вы можете сделать следующее:
Посмотрите, как мы вначале сортируем набор неупорядоченных строк по
your_auto_increment_field
(или как бы вы это ни называли) по убыванию. Затем мы ограничиваем набор результатов только первой строкойLIMIT 1
.источник
Вы можете объединить два запроса, предложенных @spacepille, в один запрос, который выглядит следующим образом:
Он должен работать молниеносно, но в таблицах INNODB он на долю миллисекунды медленнее, чем ORDER + LIMIT.
источник
answered Jun 14 at 9:41
примерно на 1 год и 6 месяцев раньше :)для таблиц с большим количеством строк два запроса, вероятно, быстрее ...
источник
Сделать это просто используйте:
PDO::lastInsertId
http://php.net/manual/en/pdo.lastinsertid.php
источник
Если вы хотите добавить самую последнюю, добавьте временную метку и выберите упорядоченный в обратном порядке по самой высокой временной отметке, предел 1. Если вы хотите перейти по идентификатору, сортируйте по идентификатору. Если вы хотите использовать тот, который вы только что добавили, используйте
mysql_insert_id
.источник
Почти в каждой таблице базы данных есть столбец auto_increment (обычно id)
Если вы хотите, чтобы последняя из всех строк в таблице,
ИЛИ
Вы можете объединить два запроса в один запрос, который выглядит следующим образом:
источник
Этот запрос используется для получения последней записи в вашей таблице.
источник
Многие ответы здесь говорят то же самое (порядок по вашему автоинкременту), что нормально, если у вас есть автоинкрементный столбец, который проиндексирован.
Напомним, что если у вас есть такое поле, и оно является первичным ключом, не будет никакого снижения производительности за использование по
order by
сравнению сselect max(id)
. Первичный ключ - это порядок упорядочения данных в файлах базы данных (по крайней мере, для InnoDB), и СУБД знает, где заканчиваются эти данные, и она может оптимизироваться так,order by id + limit 1
чтобы достигнутьmax(id)
Теперь дорога проходит меньше, когда у вас нет автоинкрементного первичного ключа. Может быть, первичный ключ - это естественный ключ, который состоит из 3 полей ... Однако не все потеряно. Из языка программирования вы можете сначала получить количество строк с
а затем использовать полученный номер в
LIMIT
пунктеК сожалению, MySQL не позволит использовать подзапрос или пользовательскую переменную в
LIMIT
предложенииисточник
Вы можете использовать
OFFSET
вLIMIT
команде:если в вашей таблице 100 строк, это возвращает последнюю строку, не полагаясь на primary_key
источник