2012-06-29 15 views
7

¿Hay alguna manera fácil de actualizar todos los valores después de una clave duplicada? Por ejemplo:Mysql: ON DUPLICATE KEY ACTUALICE TODOS LOS VALORES?

INSERT INTO published_books 
      SELECT * FROM books 
      WHERE book_id = book_id 
      ON DUPLICATE KEY UPDATE ?everything? 

La tabla tiene alrededor de 50 columnas y la actualización de cada una de ellas sería dolorosa. ¿Algunas ideas?

+0

doloroso para quién? –

+10

para el codificador ... y para los ojos de los otros codificadores :) – luqita

Respuesta

-3
INSERT INTO published_books(col1, col2) 
VALUES (’xxx’, ‘yyy’) ON DUPLICATE KEY UPDATE col1 = VALUES(col1) 
+2

¿cómo harías lo mismo con 50 cols? col1, col2 ... col50? – luqita

4

Puede utilizar REPLACE INTO para este propósito:

REPLACE INTO published_books SELECT * from books; 
+2

Tenga en cuenta al usar 'REPLACE INTO' que realmente elimina y recrea una fila con solo la información en la inserción. No actualiza la fila como lo hace 'ON DUPLICATE KEY UPDATE'. Para obtener más información, consulte aquí: http://code.openark.org/blog/mysql/replace-into-think-twice – George

0

Si usted puede generar la consulta, se puede usar algo como esto (PHP):

$fields = array(
    'field_1', 
    'field_2', 
    'field_3' 
); 
$query = ' 
    INSERT INTO table (
    ' . implode(', ', $fields) . ' 
    ) SELECT 
     -- ... 
    ON DUPLICATE KEY UPDATE '; 
foreach ($fields as $i => $field) { 
    $query .= ($i > 0 ? ', ' : '') . $field . '=VALUES(' . $field . ')'; 
} 
Cuestiones relacionadas