2010-11-27 12 views
17

MySQLコードが正しく動作するようにこの問題を修正するにはどうすればよいですか?MySQLエラー:UPDATEとLIMITの不正使用

ここに私の問題を与える私のMySQLコードです。 UPDATEのためのMySQLのドキュメントを1として

$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

クエリには、「アクティブ」と「電子メール」テーブルの列への参照が含まれていますが、これらのテーブルはステートメントには含まれていません。マルチテーブルの更新を構成する方法については、「http://dev.mysql.com/doc/refman/5.1/en/update.html」を参照してください。 – Martin

答えて

36

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

**あなたが...直接あなたがこのようにしてみてください使用傾ける制限のmysqlに制限を使用して複数の行を更新する場合*目のために*

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

'IN()'内のsubselectは****のように遅く、永久にテーブルをロックすることができます。代わりに 'EXISTS()'を使用してください。 – DanFromGermany

3

複数テーブルの構文では、UPDATEは、条件を満たす table_referencesに名前が付けられた各テーブルの行を更新します。この場合、ORDER BYLIMIT は使用できません。