J'ai table - config . Schema: config_name | config_value
Et je voudrais mettre à jour plusieurs enregistrements dans une requête. J'essaye comme ça:
UPDATE config
SET t1.config_value = 'value'
, t2.config_value = 'value2'
WHERE t1.config_name = 'name1'
AND t2.config_name = 'name2';
mais cette requête est fausse :(
Pouvez-vous m'aider?
Essayez soit la syntaxe de mise à jour multi-table
UPDATE config t1 JOIN config t2
ON t1.config_name = 'name1' AND t2.config_name = 'name2'
SET t1.config_value = 'value',
t2.config_value = 'value2';
Voici SQLFiddle démo
ou mise à jour conditionnelle
UPDATE config
SET config_value = CASE config_name
WHEN 'name1' THEN 'value'
WHEN 'name2' THEN 'value2'
ELSE config_value
END
WHERE config_name IN('name1', 'name2');
Voici SQLFiddle démo
Vous pouvez le faire avec INSERT comme ci-dessous:
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);
Cela insère de nouvelles valeurs dans la table, mais si la clé primaire est dupliquée (déjà insérée dans la table), les valeurs que vous spécifiez seront mises à jour et le même enregistrement ne sera pas inséré une seconde fois.
dans mon cas, je dois mettre à jour les enregistrements qui sont plus de 1000, pour cela au lieu d'appuyer sur la requête de mise à jour à chaque fois que je préférais cela,
UPDATE mst_users
SET base_id = CASE user_id
WHEN 78 THEN 999
WHEN 77 THEN 88
ELSE base_id END WHERE user_id IN(78, 77)
78,77 sont les ID utilisateur et pour ceux-ci, j'ai besoin de mettre à jour les identifiants base_id 999 et 88 respectivement. Cela fonctionne pour moi.
peut-être que ce sera utile pour quelqu'un
pour Postgresql 9.5 fonctionne comme un charme
INSERT INTO tabelname(id, col2, col3, col4)
VALUES
(1, 1, 1, 'text for col4'),
(DEFAULT,1,4,'another text for col4')
ON CONFLICT (id) DO UPDATE SET
col2 = EXCLUDED.col2,
col3 = EXCLUDED.col3,
col4 = EXCLUDED.col4
ce SQL met à jour l'enregistrement existant et l'insère s'il est nouveau (2 en 1)
Exécutez le code ci-dessous si vous souhaitez mettre à jour tous les enregistrements de toutes les colonnes:
update config set column1='value',column2='value'...columnN='value';
et si vous souhaitez mettre à jour toutes les colonnes d'une ligne particulière, exécutez le code ci-dessous:
update config set column1='value',column2='value'...columnN='value' where column1='value'
La solution de Camille a fonctionné. En fait une fonction de base PHP, qui écrit l’instruction SQL. J'espère que ceci aide quelqu'un d'autre.
function _bulk_sql_update_query($table, $array)
{
/*
* Example:
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);
*/
$sql = "";
$columns = array_keys($array[0]);
$columns_as_string = implode(', ', $columns);
$sql .= "
INSERT INTO $table
(" . $columns_as_string . ")
VALUES ";
$len = count($array);
foreach ($array as $index => $values) {
$sql .= '("';
$sql .= implode('", "', $array[$index]) . "\"";
$sql .= ')';
$sql .= ($index == $len - 1) ? "" : ", \n";
}
$sql .= "\nON DUPLICATE KEY UPDATE \n";
$len = count($columns);
foreach ($columns as $index => $column) {
$sql .= "$column=VALUES($column)";
$sql .= ($index == $len - 1) ? "" : ", \n";
}
$sql .= ";";
return $sql;
}
au lieu de cela
UPDATE staff SET salary = 1200 WHERE name = 'Bob';
UPDATE staff SET salary = 1200 WHERE name = 'Jane';
UPDATE staff SET salary = 1200 WHERE name = 'Frank';
UPDATE staff SET salary = 1200 WHERE name = 'Susan';
UPDATE staff SET salary = 1200 WHERE name = 'John';
vous pouvez utiliser
UPDATE staff SET salary = 1200 WHERE name IN ('Bob', 'Frank', 'John');
En supposant que vous ayez la liste des valeurs à mettre à jour dans une feuille de calcul Excel avec valeur_config dans colonne A1 et nom_config dans B1 vous pouvez facilement y écrire la requête à l'aide d'une formule Excel comme
=CONCAT("UPDATE config SET config_value = ","'",A1,"'", " WHERE config_name = ","'",B1,"'")