MySQL에서 마지막으로 업데이트 된 행의 ID를 얻는 방법?
PHPMySQL에서 마지막으로 업데이트 된 행의 ID를 얻는 방법?
PHP를 사용하여 MySQL에서 마지막 업데이트 된 행의 ID를 얻으려면 어떻게해야합니까?
해결법
-
==============================
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;
aefxx로 편집
이 기술은 업데이트 문에 의해 영향을받는 모든 행의 ID를 검색하도록 추가로 확장 될 수 있습니다.
SET @uids := null; UPDATE footable SET foo = 'bar' WHERE fooid > 5 AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) ); SELECT @uids;
모든 ID가 쉼표로 연결된 문자열이 반환됩니다.
-
==============================
2.흠, 나는 답변 중에서 가장 쉬운 해결책을 찾지 못한다는 사실에 놀랐습니다.
흠, 나는 답변 중에서 가장 쉬운 해결책을 찾지 못한다는 사실에 놀랐습니다.
item_id가 항목 테이블의 정수 ID 열이고 행을 다음 문으로 업데이트한다고 가정합니다.
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();
실제로 변경된 행만 업데이트해야하는 경우 행에서 데이터가 변경 될 경우 LAST_INSERT_ID 확인을 통해 item_id의 조건부 업데이트를 추가해야합니다.
-
==============================
3.이것은 Salman A의 대답과 같은 방법이지만 실제로 여기에 필요한 코드가 있습니다.
이것은 Salman A의 대답과 같은 방법이지만 실제로 여기에 필요한 코드가 있습니다.
먼저 행이 수정 될 때마다 자동으로 추적 할 수 있도록 표를 편집하십시오. 행이 처음 삽입되었을 때만 알고 싶으면 마지막 행을 제거하십시오.
ALTER TABLE mytable ADD lastmodified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
그런 다음 마지막으로 업데이트 된 행을 찾으려면이 코드를 사용할 수 있습니다.
SELECT id FROM mytable ORDER BY lastmodified DESC LIMIT 1;
이 코드는 모두 MySQL 대 PostgreSQL에서 해제되었습니다 : 테이블과 MySQL 매뉴얼에 'Last Modified Time'컬럼 추가 : 행 정렬. 방금 조립 했어.
-
==============================
4.이것은 공식적으로 간단하지만 현저하게 반 직관적입니다. 당신이하고있는 경우 :
이것은 공식적으로 간단하지만 현저하게 반 직관적입니다. 당신이하고있는 경우 :
사용자 업데이트 설정 status = 'processing'여기서 status = 'pending' 한도 1
그것을 다음과 같이 변경하십시오.
사용자 업데이트 설정 status = 'processing'여기서 status = 'pending' 및 last_insert_id (user_id) 한도 1
where 절에 last_insert_id (user_id)를 추가하면 MySQL은 내부 변수를 발견 된 행의 ID로 설정합니다. 이와 같이 last_insert_id (expr)에 값을 전달하면 해당 값을 반환합니다. 여기서와 같은 ID는 항상 양의 정수이므로 항상 where 절을 방해하지 않고 항상 true로 평가됩니다. 일부 행이 실제로 발견 된 경우에만 작동하므로 영향을받은 행을 확인하는 것을 잊지 마십시오. 그런 다음 여러 가지 방법으로 ID를 얻을 수 있습니다.
MySQL last_insert_id ()
MySQL mysql_insert_id ()
PHP 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(); }
(참고로 DB 클래스가 있습니다.)
-
==============================
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(); }
그것은 나를 위해 일합니다;)
-
==============================
6.이봐, 방금 그런 트릭이 필요했다. 다른 방법으로 해결 했어. 아마 너를 위해 일할거야. 이것은 확장 가능한 솔루션이 아니며 큰 데이터 세트에는 매우 좋지 않습니다.
이봐, 방금 그런 트릭이 필요했다. 다른 방법으로 해결 했어. 아마 너를 위해 일할거야. 이것은 확장 가능한 솔루션이 아니며 큰 데이터 세트에는 매우 좋지 않습니다.
쿼리를 두 부분으로 나눕니다.
먼저 업데이트 할 행의 ID를 선택하고 임시 테이블에 저장하십시오.
둘째, temp_table의 id로 변경된 update 문의 조건을 사용하여 원래 업데이트를 수행합니다.
그리고 동시성을 보장하기 위해이 두 단계 전에 테이블을 잠근 다음 끝에 잠금을 해제해야합니다.
다시 말하지만, 이것은 나를 위해, 제한 1로 끝나는 쿼리를 위해, 그래서 나는 심지어 임시 테이블을 사용하지 않고 대신 단순히 첫 번째 선택의 결과를 저장하는 변수를 사용합니다.
나는 항상 하나의 행만 업데이트 할 것이고 코드는 간단하다는 것을 알기 때문에이 방법을 선호한다.
-
==============================
7.마지막 업데이트 된 행의 ID는 'updateQuery'에서 해당 행을 찾아서 업데이트하는 데 사용하는 것과 동일한 ID입니다. 따라서 원하는 ID를 저장 (전화)하십시오.
마지막 업데이트 된 행의 ID는 'updateQuery'에서 해당 행을 찾아서 업데이트하는 데 사용하는 것과 동일한 ID입니다. 따라서 원하는 ID를 저장 (전화)하십시오.
last_insert_id ()는 AUTO_INCREMENT에 의존하지만 마지막으로 업데이트 된 ID는 아닙니다.
-
==============================
8.위의 허용 된 답변 더보기 궁금해하는 사람들을 위해 : = & =
위의 허용 된 답변 더보기 궁금해하는 사람들을 위해 : = & =
: =와 =의 중요한 차이점은 : =은 어디에서나 변수 할당 연산자로 작동하지만 SET 문에서는 그런 식으로 작동하고 다른 곳에서는 비교 연산자입니다.
그래서 SELECT @var = 1 + 1; @var를 변경하지 않고 부울 값 (@var의 현재 값에 따라 1 또는 0)을 반환하고 SELECT @ var : = 1 + 1; @var를 2로 변경하고 2를 반환합니다. [출처]
-
==============================
9.삽입 만하고 있고 동일한 세션에서 하나를 원할 경우, peirix의 대답에 따라하십시오. 수정을 수행하는 경우 가장 최근에 갱신 된 항목을 저장하기 위해 데이터베이스 스키마를 수정해야합니다.
삽입 만하고 있고 동일한 세션에서 하나를 원할 경우, peirix의 대답에 따라하십시오. 수정을 수행하는 경우 가장 최근에 갱신 된 항목을 저장하기 위해 데이터베이스 스키마를 수정해야합니다.
이전에 수정 한 ID를 다른 세션에서 가져오고 싶다면 (즉, 현재 실행중인 PHP 코드에 의해 수행 된 것이 아니라 다른 요청에 대한 응답으로 완료된 ID), 다음을 추가 할 수 있습니다. TIMESTAMP 열을 last_modified라는 테이블에 추가하고 (http://dev.mysql.com/doc/refman/5.1/en/datetime.html 참조), 업데이트 할 때 last_modified = CURRENT_TIME을 설정하십시오.
이것을 설정하면 다음과 같은 쿼리를 사용할 수 있습니다. SELECT id FROM 테이블 ORDER BY last_modified DESC LIMIT 1; 가장 최근에 수정 된 행을 가져옵니다.
-
==============================
10.
SET @uids := ""; UPDATE myf___ingtable SET id = id WHERE id < 5 AND ( SELECT @uids := CONCAT_WS(',', CAST(id AS CHAR CHARACTER SET utf8), @uids) ); SELECT @uids;
나는 ID를 왜 만들어야 했는가? (또는 왜 그런지) ... 아니면 @uids 내용을 얻을 수 없다. Btw Pomyk 대답에 대한 많은 감사!
-
==============================
11.내 솔루션은, 먼저 선택 명령과 "id"(@uids)를 결정한 후이 ID를 @uids로 업데이트합니다.
내 솔루션은, 먼저 선택 명령과 "id"(@uids)를 결정한 후이 ID를 @uids로 업데이트합니다.
SET @uids := (SELECT id FROM table WHERE some = 0 LIMIT 1); UPDATE table SET col = 1 WHERE id = @uids;SELECT @uids;
그것은 내 프로젝트에서 일했습니다.
-
==============================
12.긴 MySQL 코드가 필요 없습니다. PHP에서 쿼리는 다음과 같이 보일 것입니다 :
긴 MySQL 코드가 필요 없습니다. PHP에서 쿼리는 다음과 같이 보일 것입니다 :
$updateQuery = mysql_query("UPDATE table_name SET row='value' WHERE id='$id'") or die ('Error'); $lastUpdatedId = mysql_insert_id();
from https://stackoverflow.com/questions/1388025/how-to-get-id-of-the-last-updated-row-in-mysql by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
MySQL 트리거에서 PHP 스크립트 호출하기 (0) | 2018.09.08 |
---|---|
codeigniter의 경로에서 "index.php"를 제거하는 법 (0) | 2018.09.08 |
HTTPS 및 SSL3_GET_SERVER_CERTIFICATE : 인증서 확인에 실패했으며 CA는 정상입니다. (0) | 2018.09.08 |
$ .load 내부의 양식이 올바르게 게시되지 않습니다. (0) | 2018.09.08 |
내 문자열의 특정 부분을 대체하는 방법? (0) | 2018.09.08 |