mysql - number - on duplicate key update sql server
ActualizaciĆ³n masiva de mysql con donde declaraciĆ³n (4)
La solución más sencilla en su caso es usar la construcción de ON DUPLICATE KEY UPDATE
. Funciona muy rápido, y hace el trabajo de manera fácil.
INSERT into `table` (id, fruit)
VALUES (1, ''apple''), (2, ''orange''), (3, ''peach'')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
o utilizar la construcción 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);
¿Cómo actualizar los datos mysql a granel? Cómo definir algo como esto:
UPDATE `table`
WHERE `column1` = somevalues
SET `column2` = othervalues
Con algunos valores como:
VALUES
(''160009''),
(''160010''),
(''160011'');
y otros valores:
VALUES
(''val1''),
(''val2''),
(''val3'');
tal vez es imposible con mysql? un script php?
Puedes usar implode para actualizar masivamente mysql con la instrucción where
$requete = $pdo->prepare("update table_name set field = 1 where id in(".implode('', '', $ids).")");
$requete->execute();
$ ids es una matriz
Si los datos "masivos" que tiene son dinámicos y provienen de PHP (después de todo, los etiquetó), entonces la consulta tendría un aspecto similar al siguiente:
INSERT INTO `foo` (id, bar)
VALUES
(1, ''pineapple''),
(2, ''asian pear''),
(5, ''peach'')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);
y el PHP para generar esto a partir de una matriz existente (asumiendo que la matriz tiene un formato como:
$array = (
somevalues_key => othervalues_value
);
) se vería algo como esto (de ninguna manera el mejor (no se trata de escapar o sanear los valores, por ejemplo), solo un ejemplo rápido):
$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)";
Si tiene datos en formato de matriz, intente esto
y su consulta es como "UPDATE table WHERE column1 = ? SET column2 = ?"
luego configúralo como abajo
foreach($data as $key => $value) {
$query->bind_param(''ss'', $key, $value);
$query->execute();
}
Espero que funcione.
Referencia de this .