varios soporta segundo registros por optimizar lentas cuantas consultas actualizar mysql sql

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