Как получить идентификатор последней обновленной строки в MySQL с помощью PHP?
Ответ 1
Вот ответ на эту проблему :)
SET @update_id := 0;
UPDATE some_table SET column_name = 'value', id = (SELECT @update_id := id)
WHERE some_other_column = 'blah' LIMIT 1;
SELECT @update_id;
Этот метод может быть дополнительно расширен для получения идентификатора каждой строки, затронутой оператором обновления:
SET @uids := null;
UPDATE footable
SET foo = 'bar'
WHERE fooid > 5
AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;
Это код вернет строку со всеми идентификаторами.
Ответ 2
Предположим, что item_id –это столбец целочисленного идентификатора в таблице items, и вы обновляете строки с помощью следующего оператора:
UPDATE items
SET qwe = 'qwe'
WHERE asd = 'asd';
Затем, чтобы узнать последнюю затронутую строку сразу после оператора, вам следует немного обновить оператор следующим образом:
UPDATE items
SET qwe = 'qwe',
item_id=LAST_INSERT_ID(item_id)
WHERE asd = 'asd';
SELECT LAST_INSERT_ID();
Если вам нужно обновить только действительно измененную строку, вам нужно будет добавить условное обновление item_id с помощью LAST_INSERT_ID, который проверяет, будут ли данные изменяться в этой строке.
Ответ 3
Действительно это просто, но на удивление нелогично. Если вы поступите следующим образом:
update users set status = 'processing' where status = 'pending'
limit 1,
измените этот код на этот:
update users set status = 'processing' where status = 'pending'
and last_insert_id(user_id)
limit 1
Добавление last_insert_id(user_id) в предложение where указывает MySQL установить для своей внутренней переменной идентификатор найденной строки. Когда вы передаете значение, last_insert_id(expr), подобное этому, оно в конечном итоге возвращает это значение, которое в случае таких идентификаторов, как здесь, всегда является положительным целым числом и, следовательно, всегда оценивается как истинное, никогда не противореча предложению where. Это работает только в том случае, если какая-то строка действительно была найдена, поэтому не забудьте проверить затронутые строки. Затем вы можете получить идентификатор несколькими способами.
MySQL last_insert_id()
Вы можете генерировать последовательности без вызова LAST_INSERT_ID(), но полезность использования функции таким образом заключается в том, что значение идентификатора сохраняется на сервере как последнее автоматически сгенерированное значение. Это безопасно для многих пользователей, потому что несколько клиентов могут выполнить оператор UPDATE и получить собственное значение последовательности с помощью оператора SELECT (или mysql_insert_id()), не затрагивая и не подвергаясь влиянию других клиентов, которые генерируют свои собственные значения последовательности.
MySQL mysql_insert_id()
Также этот оператор возвращает значение, созданное для столбца AUTO_INCREMENT предыдущим оператором INSERT или UPDATE. Используйте эту функцию после того, как вы выполнили оператор INSERT в таблице, содержащей поле AUTO_INCREMENT, или при использовании INSERT или UPDATE для установки значения столбца с LAST_INSERT_ID (expr).
Причина различий между LAST_INSERT_ID() и mysql_insert_id() заключается в том, что LAST_INSERT_ID() упрощает использование в сценариях, в то время как mysql_insert_id() пытается предоставить более точную информацию о том, что происходит со столбцом AUTO_INCREMENT.
PHP mysqli_insert_id()
Выполнение оператора INSERT или UPDATE с использованием функции LAST_INSERT_ID () также изменит значение, возвращаемое функцией mysqli_insert_id().
Итого:
$affected_rows = DB::getAffectedRows("
update users set status = 'processing'
where status = 'pending' and last_insert_id(user_id)
limit 1"
);
if ($affected_rows) {
$user_id = DB::getInsertId();
}
Ответ 4
Во-первых, отредактируйте таблицу, чтобы она автоматически отслеживала изменение строки. Удалите последнюю строку, если вы хотите знать, когда строка была изначально вставлена.
ALTER TABLE mytable
ADD lastmodified TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
Затем, чтобы узнать последнюю обновленную строку, вы можете использовать этот код.
SELECT id FROM mytable ORDER BY lastmodified DESC LIMIT 1;
Ответ 5
Запрос :
$sqlQuery = "UPDATE
update_table
SET
set_name = 'value'
WHERE
where_name = 'name'
LIMIT 1;";
Функция PHP:
function updateAndGetId($sqlQuery) {
mysql_query(str_replace("SET", "SET id = LAST_INSERT_ID(id),", $sqlQuery));
return mysql_insert_id();
}
Web