2014-02-26 2 views
0

의 데이터를 사용하여 업데이트 쿼리 나는 자체가 두 배열이 포함 된 배열 한 - order of the itemCodeIgniter의 활동 기록 - 배열

그들은이 같은 것을 하나 item ids을 보유하고 있으며, 다른 하나는 보유 모양 :

Array 
(
    [item_order] => Array 
     (
      [0] => 0 
      [1] => 1 
      [2] => 2 
     ) 

    [item_id] => Array 
     (
      [0] => 20 
      [1] => 34 
      [2] => 24 
     ) 

) 

무엇 이제 id를 기반으로 각 항목 행 순서를 업데이트해야합니다.

어디서부터 시작해야할지 모르겠습니다.

최종 결과는

item_id  item_name  item_order 
------------------------------------ 
20   xxxxx   0 
34   yyyyy   1 
24   zzzzz   2 

답변

1

당신은 포함 arraysarray로 데이터를 변환 할 수 있습니다 key =>value 쌍 (키는 필드 이름 임 들) 및 codeigniters의 update_batch 방법을 사용 active_record 클래스 :

list($item_id, $item_order) = $array_with_data; // or extract($array_with_data); 

$data = []; 

foreach($item_id as $i => $id) { 
$data[] = [ 'item_id' => $id, 'item_order' => $item_order[$i], ]; 
} 

$this->db->update_batch('yourtable', $data, 'item_id'); 
foreach 루프

에 무슨 일

이 :

Array 
(
    [item_order] => Array 
     (
     [0] => 0 
     [1] => 1 
     [2] => 2 
    ) 

    [item_id] => Array 
     (
     [0] => 20 
     [1] => 34 
     [2] => 24 
    ) 

) 

Array 
( 
    [0] => Array 
    (
    'item_order' => 0 
    'item_id' => 20 
) 
    [1] => Array 
    (
    'item_order' => 1 
    'item_id' => 34 
) 
    [2] => Array 
    (
    'item_order' => 2 
    'item_id' => 24 
) 
) 

이에 켜져 언더의 형식은 update_batch입니다. tand. 세 번째 매개 변수는 업데이트 할 행을 알기 위해 함수가 사용하는 필드를 지정합니다.

업데이트 일괄 처리는 데이터를 100 행만큼 분리 한 다음 대/소문자 기반 쿼리를 작성하므로 대용량 쿼리를 피할 수 있습니다.

+0

배열을 약간 변경했습니다. 이것이 당신의 대답을 바꾸겠습니까? 니가하고있는 일은 내가하려고하는 것처럼 보인다 ... – Tom

0

같은 기능

$item_ids = $item['item_id']; 
$orders = $item['item_order']; 
if (!empty($item_ids) && !empty($orders)) { 
    for ($i = 0; $i < count($item_ids); $i++) { 
     $data = array('item_order' => $orders[$i]); 
     $this->db->where('item_id', $item_ids[$i]); 
     $this->db->update('yourtablename', $data); 
    } 
} 

Updating Data를 만들어 모델이 하나를 시도 보일 것

+0

루프를 수행하지 않고 각 행에 대해 새 업데이트 쿼리를 수행하지 않고도이 작업을 수행 할 수있는 방법이 있습니까? – Tom

+0

순서대로 ID를 정렬 할 수 없기 때문에 배열을 반복 할 필요가 없습니다. –

+0

@ 답 내 대답을 확인하십시오. 주기적으로 업데이트를 사용하지 않습니다. – baldrs