Подтвердить что ты не робот

Mysql в PHP - как обновить только одну строку в таблице, но с наибольшим номером id

Я пытаюсь обновить поля в своей БД, но застрял в такой простой проблеме: я хочу обновить только одну строку в таблице с наибольшим номером id. Я бы сделал что-то вроде этого:

UPDATE table SET name='test_name' WHERE id = max(id)

К сожалению, он не работает. Любые идеи?

Структура таблицы

id | name
---|------
 1 | ghost
 2 | fox
 3 | ghost

Я хочу обновить только последнюю строку, потому что идентификационный номер является самым большим.

4b9b3361

Ответ 1

Сначала выберите максимальный идентификатор, затем обновите.

UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)

Ответ 2

Использование MAX() невозможно в этом положении. Но вы можете это сделать:

UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;

Ответ 3

Я думаю, что метод iblue, вероятно, лучший выбор; но другое решение может заключаться в том, чтобы установить результат как переменную, а затем использовать эту переменную в инструкции UPDATE.

SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;

Это может пригодиться, если вы ожидаете, что будете запускать несколько запросов с одинаковым идентификатором, но это не идеальный вариант для запуска двух запросов, если вы выполняете только одну операцию обновления.

Ответ 4

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, но за счет производительности.

Ответ 5

Старый вопрос, но для тех, кто подходит к этому, вы также можете это сделать:

UPDATE
     `table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';

Ответ 6

Мы можем обновить запись, используя функцию max(), и, возможно, это поможет вам.

 UPDATE MainTable
 SET [Date] = GETDATE()
 where [ID] = (SELECT MAX([ID]) FROM MainTable)

Для меня будет работать совершенный.

Ответ 7

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) не будет работать.

Ответ 8

Используя PHP, я, как правило, запускаю mysqli_num_rows, затем помещаю результат в переменную, а затем выполняю оператор UPDATE, в котором указано, где ID = вновь созданная переменная. Некоторые люди отметили, что нет необходимости использовать LIMIT 1 в конце, но мне нравится делать это, поскольку это не вызывает какой-либо тривиальной задержки, но может помешать любым непредвиденным действиям.

Если вы только что вставили строку, вы можете использовать функцию PHP mysqli_insert_id, чтобы автоматически вернуть этот идентификатор вам без необходимости запуска запроса mysqli_num_rows.