IT/PHP | CI
[PHP] 쿼리 반복문 없이 효율적으로 실행시키기
카제인나트륨.
2024. 8. 9. 20:04
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
반응형