Comment mettre à jour des données mysql en bloc? Comment définir quelque chose comme ceci:
UPDATE `table`
WHERE `column1` = somevalues
SET `column2` = othervalues
avec certaines comme:
VALUES
('160009'),
('160010'),
('160011');
et autres valeurs:
VALUES
('val1'),
('val2'),
('val3');
peut-être que c'est impossible avec mysql? un script php?
La solution la plus simple dans votre cas consiste à utiliser ON DUPLICATE KEY UPDATE
construction. Cela fonctionne très vite et fait le travail facilement.
INSERT into `table` (id, fruit)
VALUES (1, 'Apple'), (2, 'orange'), (3, 'Peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
ou d'utiliser CASE
construction
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);
Si les données "en vrac" que vous avez sont dynamiques et proviennent de PHP (vous les avez taguées, après tout), la requête ressemblerait à ceci:
INSERT INTO `foo` (id, bar)
VALUES
(1, 'pineapple'),
(2, 'asian pear'),
(5, 'Peach')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);
et le PHP pour le générer à partir d'un tableau existant (en supposant que le tableau ait le format suivant:
$array = (
somevalues_key => othervalues_value
);
) ressemblerait à quelque chose comme ceci (en aucun cas le meilleur (par exemple, ne pas échapper ou effacer les valeurs), juste un exemple rapide):
$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)";
Vous pouvez utiliser implode pour mettre à jour en masse mysql avec l'instruction where
$requete = $pdo->prepare("update table_name set field = 1 where id in(".implode(', ', $ids).")");
$requete->execute();
$ ids est un tableau
Si vous avez des données au format tableau, essayez ceci
et votre requête est comme "UPDATE table WHERE column1 = ? SET column2 = ?"
puis réglez comme ci-dessous
foreach($data as $key => $value) {
$query->bind_param('ss', $key, $value);
$query->execute();
}
j'espère que ça va marcher.
Référence de this .