where 문이 있는 대량 업데이트 mysql
대량으로 mysql 데이터를 업데이트하려면 어떻게 해야 합니까?다음과 같은 것을 정의하는 방법:
UPDATE `table`
WHERE `column1` = somevalues
SET `column2` = othervalues
다음과 같은 값을 사용합니다.
VALUES
('160009'),
('160010'),
('160011');
기타 값:
VALUES
('val1'),
('val2'),
('val3');
mysql - php 스크립트에서는 불가능할지도 모릅니다.
당신의 경우 가장 쉬운 해결책은 시공법을 사용하는 것입니다.그것은 매우 빠르게 작동하며, 그 일을 쉽게 한다.
INSERT into `table` (id, fruit)
VALUES (1, 'apple'), (2, 'orange'), (3, 'peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
또는 건축을 이용하다
UPDATE table
SET column2 = (CASE column1 WHEN 1 THEN 'val1'
WHEN 2 THEN 'val2'
WHEN 3 THEN 'val3'
END)
WHERE column1 IN(1, 2 ,3);
보유하고 있는 "bulk" 데이터가 동적이며 PHP에서 가져온 데이터(태그 부착)라면 쿼리는 다음과 같습니다.
INSERT INTO `foo` (id, bar)
VALUES
(1, 'pineapple'),
(2, 'asian pear'),
(5, 'peach')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);
기존 어레이에서 이를 생성하기 위한 PHP를 사용합니다(배열이 다음과 같은 형식이라고 가정합니다).
$array = (
somevalues_key => othervalues_value
);
는 다음과 같습니다(최선은 아닙니다(예를 들어 주소를 이스케이프하거나 값을 삭제하지 않는 등).단순한 예에 불과합니다).
$pairs = array();
foreach ($array as $key => $value) {
$pairs[] = "($key, '$value')";
}
$query = "INSERT INTO `foo` (id, bar) VALUES " . implode(', ', $pairs) . " ON DUPLICATE KEY UPDATE bar = VALUES(bar)";
드래그 앤 드롭 table View 또는 collection View를 사용하여 사용자가 드래그 앤 드롭 기능으로 사진을 정렬할 수 있도록 하는 등 앱 내의 데이터를 정렬하는 경우 사용자 편집이 완료된 후 정렬된 ID 목록을 쉼표로 백엔드로 전송합니다.
백엔드에서 다음과 같은 ID를 어레이로 분해합니다.
$new_ranks = array();
$supplied_orders = explode(",", $_POST["supplied_new_order"]); //52,11,6,54,2 etc
$start_order = 99999;
foreach ($supplied_orders as $supplied_row_id) {
//your all validations... make sure supplied_row_id belongs to that user or not etc..
$new_ranks[intval($supplied_row_id)] = $start_order--;
}
이제 @Farside Recommendation 2와 같은 모든 새로운 순위를 업데이트할 수 있습니다.
if (count($new_ranks) > 0) {
$case_sqls = array();
foreach ($new_ranks as $id => $rank) {
$case_sqls[] = "WHEN ".intval($id)." THEN ".intval($rank)."";
}
$case_sql = implode(" ", $case_sqls);
$this->db->query("
UPDATE
service_user_medias
SET
rank = (CASE id ".$case_sql." END)
WHERE
id IN(".implode(",", array_keys($new_ranks)).");
");
}
다음과 같이 JOIN을 사용하여 업데이트를 시도할 수 있습니다.
UPDATE table
INNER JOIN (
SELECT 1 column1, 2 column2, 10 new_v1, 20 new_v2, 30 new_v3
UNION ALL SELECT 4 column1, 5 column2, 40 new_v1, 50 new_v2, 60 new_v3
) updates
ON table.column1 = updates.column1
AND table.column2 = updates.column2
SET
table.column1 = updates.new_v1,
table.column2 = updates.new_v2,
table.column3 = updates.new_v3;
네가 내부를 만들 수만 있다면SELECT
의 성명updates
서브쿼리에서는 이러한 모든 업데이트를 하나의 스테이트먼트에서 실행할 수 있습니다(테이블 크기에 따라 InnoDB의 퍼포먼스가 향상됩니다).
데이터가 배열 형식인 경우 다음을 수행하십시오.
그리고 당신의 질문은"UPDATE table WHERE column1 = ? SET column2 = ?"
그리고 아래와 같이 설정합니다.
foreach($data as $key => $value) {
$query->bind_param('ss', $key, $value);
$query->execute();
}
효과가 있길 바라야죠
여기서부터의 참조.
언급URL : https://stackoverflow.com/questions/35726910/bulk-update-mysql-with-where-statement
'source' 카테고리의 다른 글
"java - server"와 "java - client"의 실제 차이점은 무엇입니까? (0) | 2022.10.06 |
---|---|
문자열에서 마지막으로 발생한 문자열 바꾸기 (0) | 2022.10.06 |
모키토:바운드가 있는 와일드카드를 사용하여 타입을 반환하는 스터브 방식 (0) | 2022.10.06 |
Python에서 텍스트 파일을 연결하려면 어떻게 해야 하나요? (0) | 2022.10.06 |
Symfony 2 Entity Manager 주입 인 서비스 (0) | 2022.10.06 |