2010-11-27 15 views
17

¿Cómo puedo corregir este problema para que mi código MySQL funcione correctamente?Error de MySQL: uso incorrecto de ACTUALIZAR y LIMITAR

Aquí está mi código MySQL que me da el problema.

$q = "UPDATE users INNER JOIN contact_info ON contact_info.user_id = users.user_id SET active.users = NULL WHERE (email.contact_info = '" . mysqli_real_escape_string($mysqli, $x) . "' AND active.users = '" . mysqli_real_escape_string($mysqli, $y) . "') LIMIT 1"; 
$r = mysqli_query ($mysqli, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli)); 
+0

Su consulta incluye referencias a columnas en las tablas 'activo' y 'correo electrónico', mientras que esas tablas no están incluidas en la declaración. Consulte 'http://dev.mysql.com/doc/refman/5.1/en/update.html' para obtener orientación sobre cómo estructurar una actualización de varias tablas. – Martin

Respuesta

36

De acuerdo con la documentación de MySQL para UPDATE:

For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.

13

** si desea actualizar varias filas utilizando límite en MySQL ... limitar directamente usted no puede utilizar tratar como esto * *

UPDATE table_name SET name='test' 
    WHERE id IN (
     SELECT id FROM (
      SELECT id FROM table_name 
      ORDER BY id ASC 
      LIMIT 0, 10 
     ) tmp 
    ); 
+2

Una subselección dentro de 'IN()' es lenta como **** y puede bloquear una tabla como siempre. Use 'EXISTS()' en su lugar. – DanFromGermany

3

Para º e la sintaxis de tablas múltiples, UPDATE actualiza las filas en cada tabla nombrada en tabla_referencias que satisfacen las condiciones. En este caso, ORDER BY y LIMIT no se pueden usar

Cuestiones relacionadas