728x90
반응형
데이터가 아래처럼 있다고 가정합니다.
반복문으로 쿼리를 실행하지 않고 일괄 업데이트 시키려고 합니다.
$data = [
['id' => 1, 'name' => 'John', 'age' => 28],
['id' => 2, 'name' => 'Jane', 'age' => 24],
['id' => 3, 'name' => 'Paul', 'age' => 32],
['id' => 4, 'name' => 'Mark', 'age' => 40],
];
소스 - update
$ids = array_column($data, 'id');
$cases = [];
foreach ($data as $row) {
$cases[] = "WHEN {$row['id']} THEN {$row['age']}";
}
$cases_sql = implode(' ', $cases);
$sql = "UPDATE your_table_name SET age = CASE id $cases_sql ELSE age END WHERE id IN (" . implode(',', $ids) . ")";
$this->db->query($sql);
1. array_column(): id 컬럼만 추출하여 WHERE IN 조건에 사용할 수 있게 합니다.
2. foreach 루프: CASE 문에서 사용할 조건을 생성합니다. 이 부분은 PHP 내에서 동적으로 SQL 문을 생성할 수 있게 합니다.
3. query(): 최종적으로 생성된 SQL을 직접 실행합니다.
소스 - insert
$data = [
['id' => 1, 'name' => 'John', 'age' => 28],
['id' => 2, 'name' => 'Jane', 'age' => 24],
['id' => 3, 'name' => 'Paul', 'age' => 32],
['id' => 4, 'name' => 'Mark', 'age' => 40],
];
$values = [];
foreach ($data as $row) {
$values[] = "({$row['id']}, '{$row['name']}', {$row['age']})";
}
$values_sql = implode(', ', $values);
$sql = "INSERT INTO your_table_name (id, name, age) VALUES $values_sql";
$this->db->query($sql);
1. $values[]: 각 행을 SQL 구문에 맞게 포맷팅하여 $values 배열에 추가합니다.
2. implode(): 각 행의 값들을 쉼표로 구분된 하나의 문자열로 만듭니다.
3. $this->db->query($sql): 최종적으로 SQL 구문을 실행합니다.
728x90
반응형
'IT > PHP | CI' 카테고리의 다른 글
[PHP] 알면 좋은 배열 함수 array_map, array_filter, array_merge , array_diff, array_column, array_unique (0) | 2025.02.27 |
---|---|
[PHP] $_SERVER['REMOTE_ADDR']의 함정: 실제 사용자 IP를 정확히 파악하는 기술 (0) | 2024.09.10 |
[PHP] 객체형 배열 값이 존재하는지 확인하는 법 (0) | 2024.07.23 |
[PHP] 포함된 문자 찾기 str_contains(), str_starts_with(), str_ends_with() 및 strpos() (0) | 2024.06.22 |
[PHP/CodeIgniter] ZOOM API 연동하기 (sever-to-sever OAuth) - 2 (0) | 2023.10.13 |