2013-12-20 4 views
6

하나의 쿼리로 MySQL에 다중 삽입 후 모든 삽입 된 ID를 가져올 수 있습니까? 예 (추상) : 그것은 이렇게 여기에서 할 수MySQL에 마지막으로 삽입 된 IDS 가져 오기

$ids = array(); 
$parts = array(); 
$query = 'INSERT INTO `TABLENAME` (`FIELDS`) VALUES'; 

$items = array(values); 
foreach($items as $item){ 
    $parts[] = '('.$item['key1'].','.$item['key2']...','.$item['keyN'].')'; 
} 

$query .= implode(',',$parts); 
mysqli_query($link,$query); 
$ids = ... // getting ALL inserted IDs 
var_dump($ids); 

(솔루션 중 하나). 예제 (초록) :

$ids = array(); 

$items = array(values); 
foreach($items as $item){ 
    $query ='INSERT INTO `TABLENAME` (`FIELDS`) VALUES('.$item['key1'].','.$item['key2']...','.$item['keyN'].')'; 
    mysqli_query($link,$query); 
    $ids[] = mysqli_insert_id($link); 
} 
var_dump($ids); 

그러나 나는 다음과 같이하고 싶다 : 하나의 쿼리 INSERT 모든 항목 - 하나의 쿼리는 모든 삽입 된 ID를 얻는다.

UPDATE

내 솔루션 (질문 generate an integer sequence in MySQL 기준) 단일의 요청에 의한 마지막으로 삽입 ID`s의 뒷 덮개 순서.

$query_inserted_ids = "SELECT @row := @row +1 AS row_id 
         FROM TABLENAME , (SELECT @row := LAST_INSERT_ID()-1)r 
         WHERE @row <(
         SELECT id 
         FROM TABLENAME 
         ORDER BY id DESC 
         LIMIT 1)"; 

감사합니다.

+0

참조 http://stackoverflow.com/questions/16540997/get-all-inserted-ids-when-inserting-multiple-rows-using-a-single-query –

답변

2

의 MySQL의

SELECT LAST_INSERT_ID() 

첫 번째 ID가 여러 줄 삽입에서 반환 반환합니다. 당신이

SELECT ROW_COUNT() 

와 결합하는 경우는 ROW_COUNT()에 지정된 레코드 수에 의해 LAST_INSERT_ID() 및 증가와 함께 시작할 수 있습니다.

관련 문제