2009-10-03 35 views
28
UPDATE messages set test_read =1 
     WHERE userid='xyz' 
     ORDER BY date_added DESC 
     LIMIT 5, 5 ; 

Estoy tratando de utilizar esta consulta para actualizar un conjunto de 5 filas usando MySQL límite, pero está mostrando un error..The de abajo está trabajando¿actualizar varias filas usando límite en mysql?

UPDATE messages set test_read =1 
     WHERE userid='xyz' 
     ORDER BY date_added DESC 
     LIMIT 5 ; 

¿por qué el primero no funciona?

Respuesta

53

Si realmente tiene que hacerlo de esta manera, se puede usar algo como esto:

UPDATE messages SET test_read=1 
WHERE id IN (
    SELECT id FROM (
     SELECT id FROM messages 
     ORDER BY date_added DESC 
     LIMIT 5, 5 
    ) tmp 
); 
+1

¿Realmente necesita la doble selección anidada? En ms sql sería algo así como "Where id in (SELECCIONAR TOP 5 id FROM mensajes ORDER BY fecha_añadir DESC)" –

+19

Sí, MySQL no le permite actualizar una tabla de la que selecciona. La selección anidada adicional lo obliga a guardar los resultados en una tabla temporal. –

+2

Cuando pregunta 'si realmente debe hacerlo de esta manera', ¿está insinuando que hay una mejor alternativa para actualizar los registros basados ​​en un rango dado por el orden de uno de sus campos? – deed02392

Cuestiones relacionadas