Ответ 1
Сначала выберите максимальный идентификатор, затем обновите.
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
Я пытаюсь обновить поля в своей БД, но застрял в такой простой проблеме: я хочу обновить только одну строку в таблице с наибольшим номером id. Я бы сделал что-то вроде этого:
UPDATE table SET name='test_name' WHERE id = max(id)
К сожалению, он не работает. Любые идеи?
id | name
---|------
1 | ghost
2 | fox
3 | ghost
Я хочу обновить только последнюю строку, потому что идентификационный номер является самым большим.
Сначала выберите максимальный идентификатор, затем обновите.
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
Использование MAX()
невозможно в этом положении. Но вы можете это сделать:
UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
Я думаю, что метод iblue, вероятно, лучший выбор; но другое решение может заключаться в том, чтобы установить результат как переменную, а затем использовать эту переменную в инструкции UPDATE.
SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;
Это может пригодиться, если вы ожидаете, что будете запускать несколько запросов с одинаковым идентификатором, но это не идеальный вариант для запуска двух запросов, если вы выполняете только одну операцию обновления.
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
Этот запрос вернет ошибку, поскольку вы не можете выполнить подзапрос SELECT из той же таблицы, которую вы обновляете.
Попробуйте использовать это:
UPDATE table SET name='test_name' WHERE id = (
SELECT uid FROM (
SELECT MAX(id) FROM table AS t
) AS tmp
)
Это создает временную таблицу, которая позволяет использовать ту же таблицу для UPDATE и SELECT, но за счет производительности.
Старый вопрос, но для тех, кто подходит к этому, вы также можете это сделать:
UPDATE
`table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
Мы можем обновить запись, используя функцию max(), и, возможно, это поможет вам.
UPDATE MainTable
SET [Date] = GETDATE()
where [ID] = (SELECT MAX([ID]) FROM MainTable)
Для меня будет работать совершенный.
UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE'
ORDER BY ID
DESC LIMIT 1;
Потому что вы не можете использовать SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1
. Это дает вам идентификатор, который имеет максимальное значение MAX(ID)
, как вы пытались сделать. Но MAX(ID)
не будет работать.
Используя PHP, я, как правило, запускаю mysqli_num_rows
, затем помещаю результат в переменную, а затем выполняю оператор UPDATE
, в котором указано, где ID = вновь созданная переменная. Некоторые люди отметили, что нет необходимости использовать LIMIT 1
в конце, но мне нравится делать это, поскольку это не вызывает какой-либо тривиальной задержки, но может помешать любым непредвиденным действиям.
Если вы только что вставили строку, вы можете использовать функцию PHP mysqli_insert_id
, чтобы автоматически вернуть этот идентификатор вам без необходимости запуска запроса mysqli_num_rows
.