Массовое обновление mysql с указанием where
Как обновить данные mysql навалом?
Как определить что-то вроде этого:
UPDATE `table`
WHERE `column1` = somevalues
SET `column2` = othervalues
с некоторыми значениями, такими как:
VALUES
('160009'),
('160010'),
('160011');
и другие значения:
VALUES
('val1'),
('val2'),
('val3');
Возможно, это невозможно с mysql?
php script?
Ответы
Ответ 1
Самым простым решением в вашем случае является использование конструкции ON DUPLICATE KEY UPDATE
. Это работает очень быстро, и делает работу легко.
INSERT into 'table' (id, fruit)
VALUES (1, 'apple'), (2, 'orange'), (3, 'peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
или использовать конструкцию CASE
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);
Ответ 2
Если "объемные" данные у вас есть динамические и поступают из 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)";
Ответ 3
Если у вас есть данные в формате массива, попробуйте это
и ваш запрос похож на "UPDATE table WHERE column1 = ? SET column2 = ?"
затем установите его, как показано ниже
foreach($data as $key => $value) {
$query->bind_param('ss', $key, $value);
$query->execute();
}
надеюсь, что это сработает.
Ссылка из этого.
Ответ 4
Вы можете использовать implode для массового обновления mysql с помощью оператора where
$requete = $pdo->prepare("update table_name set field = 1 where id in(".implode(', ', $ids).")");
$requete->execute();
$ ids - это массив