Я пытаюсь обновить поля в моей БД, но застрял с такой простой проблемой: я хочу обновить только одну строку в таблице с самым большим номером идентификатора. Я бы сделал что-то вроде этого:
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
.