Mysql в PHP – как обновить только одну строку в таблице, но с наибольшим номером 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; 

Я думаю, что метод Иблю, вероятно, лучший выбор; но другое решение может заключаться в том, чтобы установить результат как переменную, а затем использовать эту переменную в инструкции 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 . Это дает вам ID, которые имеют максимальное значение MAX(ID) как вы пытались сделать. Но MAX(ID) не будет работать.

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

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