2010-11-27 21 views
17

Comment puis-je corriger ce problème afin que mon code MySQL fonctionne correctement.Erreur MySQL: utilisation incorrecte de UPDATE et LIMIT

Voici mon code MySQL qui me pose problème.

$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

Votre requête inclut des références aux colonnes dans les tables 'active' et 'email', alors que ces tables ne sont pas incluses dans l'instruction. Regardez 'http://dev.mysql.com/doc/refman/5.1/fr/update.html' pour savoir comment structurer une mise à jour multi-tables. – Martin

Répondre

36

Selon la documentation MySQL pour 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 vous souhaitez mettre à jour plusieurs lignes en utilisant la limite dans une base MySQL ... vous limitez directement ne pouvez pas utiliser essayer comme ça * *

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

Une sous-sélection dans un 'IN()' est lente comme **** et peut verrouiller une table comme pour toujours. Utilisez 'EXISTS()' à la place. – DanFromGermany

3

Pour e La syntaxe à tables multiples UPDATE met à jour les lignes de chaque table nommée tables_references qui satisfont aux conditions. Dans ce cas, ORDER BY et LIMIT ne peuvent pas être utilisés