2010-11-27 17 views
17

Wie kann ich dieses Problem beheben, so dass mein MySQL-Code korrekt funktioniert.MySQL-Fehler: Falsche Verwendung von UPDATE und LIMIT

Hier ist mein MySQL-Code, der mir das Problem gibt.

$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

Ihre Anfrage enthält Verweise auf Spalten in Tabellen ‚aktiv‘ und ‚E-Mail‘ verwendet werden, während die Tabellen nicht in der Erklärung enthalten. In "http://dev.mysql.com/doc/refman/5.1/en/update.html" finden Sie Anleitungen zum Strukturieren eines Multi-Tabellen-Updates. – Martin

Antwort

36

ich nach der MySQL-Dokumentation für 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

**, wenn Sie wollen ... mehrere Zeilen mit Limit in mysql aktualisieren direkt begrenzen Sie so verwenden können nicht versuchen * *

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

Ein Subselect in einem 'IN()' ist langsam wie **** und kann eine Tabelle für immer sperren. Verwenden Sie stattdessen 'EXISTS()'. – DanFromGermany

3

Für th Die multiple-table-Syntax UPDATE aktualisiert Zeilen in jeder Tabelle, die in table_references genannt wird, die die Bedingungen erfüllen. In diesem Fall ORDER BY und LIMIT nicht

Verwandte Themen