Як я можу 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 місяців раніше :)
Зробити це просто: PDO::lastInsertId
Якщо ви хочете останню додану, додайте часову позначку та виберіть упорядкований у зворотному порядку найвищий часовий відміток, ліміт 1. Якщо ви хочете перейти за ідентифікатором, відсортуйте за ідентифікатором. Якщо ви хочете скористатись тим, що ви ДОСТАВКИ додали, використовуйте mysql_insert_id.
Практично в кожній таблиці бази даних є стовпець auto_increment (як правило, ідентифікатор)
Якщо ви хочете останній з усіх рядків таблиці,
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), і RDBMS знає, де закінчуються ці дані, і він може оптимізувати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пункті