soporta - Actualizar mĂșltiples filas en una sola consulta de MySQL
cuantas consultas por segundo soporta mysql (6)
Estoy tratando de ejecutar esto:
UPDATE test
SET col2=1 WHERE col1=''test1'',
SET col2=3 WHERE col1=''test2'';
El error que estoy recibiendo:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''
Mi mesa:
CREATE TABLE `test` (
`col1` varchar(30) NOT NULL,
`col2` int(5) DEFAULT NULL,
PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Es algo sobre ,
al final de la primera fila. Cuando lo cambié a , no reconoció col2. ¿Cómo puedo hacer esto en una consulta?
Así es como lo hice:
UPDATE col1
(valor estático), col2
(valor estático) y col3
(valores diferentes) WHERE col4
tiene valores diferentes AND col5
es estático.
$someArray = ["a","b","c"];
$anotherArray = [1,2,3];
$sql = "UPDATE table SET col1 = ''$staticValue1'', col2 = ''$staticValue2'', col3 = CASE col4";
$sqlEnd = " END WHERE col4 IN (";
$seperator = ",";
for ( $c = 0; $c < count($someArray); $c++ ) {
$sql .= " WHEN " . "''" . $someArray[$c] . "''" . " THEN " . $anotherArray[$c];
if ( $c === count($someArray) - 1 ) {
$separator = ") AND col5 = ''$staticValue5''";
}
$sqlEnd .= "''" . $someArray[$c] . "''" . $seperator;
}
$sql .= $sqlEnd;
$retval = mysqli_query( $conn, $sql);
if(! $retval ) {
/* handle error here */
}
Y la cadena de salida para la consulta de MySql sería algo como esto:
UPDATE table SET col1 = ''1'', col2 = ''2'', col3 = CASE col4 WHEN ''a'' THEN 1 WHEN ''b'' THEN 2 WHEN ''c'' THEN 3 END WHERE col4 IN (''a'',''b'',''c'') AND col5 = ''col5''
Considere el uso de INSERT-ODKU (ACTUALIZACIÓN DE LA CLAVE EN DUPLICADO), ya que eso permite actualizar varias filas.
Asegúrese de que los valores de todas las columnas de PK estén en VALORES ().
Cuando sea posible, genere el SQL con datos de un esclavo.
Esta es la forma mas clara
UPDATE test
SET col2 = CASE col1
WHEN ''test1'' THEN 1
WHEN ''test2'' THEN 3
WHEN ''test3'' THEN 5
END,
colx = CASE col1
WHEN ''test1'' THEN ''xx''
WHEN ''test2'' THEN ''yy''
WHEN ''test3'' THEN ''zz''
END
WHERE col1 IN (''test1'',''test2'',''test3'')
alternativamente, cuando la construcción con cases
vuelve demasiado ilegible, podría / debería iniciar una transacción y hacer las actualizaciones de forma secuencial.
esto generalmente resulta en un sql más directo, excepto si las primeras sentencias crean filas que luego se comparan con la segunda sentencia cuando no deberían hacerlo. Sin embargo, este no es el caso en su ejemplo.
puedes usar CASE
en este
UPDATE test
SET col2 = CASE WHEN col1 = ''test1'' THEN 1 ELSE 3 END
WHERE col1 IN (''test1'', ''test2'')
o IF
(solo para MySQL
)
UPDATE test
SET col2 = IF(col1 = ''test1'', 1, 3)
WHERE col1 IN (''test1'', ''test2'')
UPDATE `wp_partners_tarif` SET `name`="name1",`cena`="1",`comisiya`="11" WHERE `id`=2;
UPDATE `wp_partners_tarif` SET `name`="name2",`cena`="2",`comisiya`="22" WHERE `id`=3;
UPDATE `wp_partners_tarif` SET `name`="name2",`cena`="3",`comisiya`="33" WHERE `id`=4