Web

Как получить ID последней обновленной строки в MySQL

Как получить идентификатор последней обновленной строки в 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

Автоматическая смена картинок на CSS. Смена изображений по таймеру

Web

Почему команда PECL выдает длинный список ошибок

Web

Как определить страну посетителя сайта по его IP адресу

Создание динамического веб-сайта: лучшие конструкторы сайтов
Web

Создание динамического веб-сайта: лучшие конструкторы сайтов