2016-06-06 19 views
-1

Sein PHP MYSQL:Sie können keine Zieltabelle 'prodt' for update angeben, in FROM-Klausel

ich einen Tisch prodt haben, in dem ich einen Wert INSERT ersten und mit seiner letzten INSERT ID tun i-Update für MAX + 1, wie unten, aber ich bin immer ERROR

Sie nicht Zieltabelle 'prodt' for update in FROM-Klausel

$a = db_insert_id(); 

$sqllast = "UPDATE prodt SET 
      pdname= ((SELECT pdname FROM (SELECT MAX(pdname) AS pdname 
      FROM prodt 
      WHERE oid = ".db_escape($oid)." ) AS pdname) + 1 ), 
      pcyn = ".db_escape(0)." 
      WHERE id = ".db_escape($a)." 
      AND oid= ".db_escape($oid)." "; 

      $resultsqllast = db_query($sqllast); 

      if((!$resultsqllast) || (db_mysql_affected_rows($db) <= 0)) { 
       throw new Exception('Wrong SQL UPDATE' . $sqllast . ' Error: '.db_error_msg($db) . db_error_no()); 
      } 

Hinweis angeben: pdname nicht String ist ... seine Nummer nur zB: 1234, also 1234 + 1 wird o utput mich 1235

Nach Forschung habe ich versucht, unten:

$sqllast = "UPDATE prodt SET 
      pdname= ((SELECT pdname FROM (SELECT MAX(pdname) AS pdname 
      FROM (SELECT * FROM prodt 
      WHERE oid = ".db_escape($oid).")AS pdname) AS pdname) + 1 ), 
      pcyn = ".db_escape(0)." 
      WHERE id = ".db_escape($a)." 
      AND oid= ".db_escape($oid)." "; 

      $resultsqllast = db_query($sqllast); 

      if((!$resultsqllast) || (db_mysql_affected_rows($db) <= 0)) { 
       throw new Exception('Wrong SQL UPDATE' . $sqllast . ' Error: '.db_error_msg($db) . db_error_no()); 
      } 

Aber es ist immer noch nicht funktioniert ... noch gleiche Nachricht bekommen ... bitte helpme

Hinweis: über erste Abfrage funktioniert gut in meiner WAMP2.5 Version, heute habe ich zu WAMP3.0 nur aktualisieren und beginnen Fehler immer für gleiche ....

Dank

+0

irgendeine ... hier ??? – user3209031

+0

einige Beispiele hier: http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server – xQbert

+0

Was ist der Fehler, den Ihre zweite Frage Ihnen gibt? Ist es der gleiche Fehler? – Keeleon

Antwort

0

Als t Der erste Fehler hat gezeigt, dass Sie keine Unterabfrage verwenden können, um aus derselben Tabelle auszuwählen, die Sie aktualisieren möchten. Sie müssen dies also in zwei Abfragen aufteilen oder prüfen, ob Sie damit umgehen können, wenn Sie Daten einfügen. In Ihrem zweiten Beispiel haben Sie den Alias ​​pdname auf 2 Unterabfragen verwendet, deshalb erhalten Sie, dass jede abgeleitete Tabelle ihren eigenen Alias ​​haben muss.

Ich bin mir nicht sicher, ob ich Ihre Tabelle korrekt verstanden habe ist Pdname eine Zeichenfolge oder Nummer? Wenn is eine Zeichenkette ist und Sie die Ganzzahl 1 hinzufügen, ist das Ergebnis möglicherweise nicht das, was Sie erwartet haben, wenn es sich um eine Ganzzahl handelt, für die ich eine Umbenennung vorschlage. Auch was ist oid? Wenn es sich um eine ID, die nur Ihre neue Zeile zurückkehren könnten Sie in der Lage sein, Ihre Abfrage zu etwas ändern wie:

UPDATE prod SET pdate = pdate+1 WHERE id = <rest of your query> 
+0

Entschuldigung ist nicht Zeichenkette ... seine Nummer nur zB: 1234, folglich 1234 + 1 gibt mich aus 1235 – user3209031

+0

Sind Sie die Aktualisierung die gleiche Reihe, wie Sie einfügen, oder kann es irgendeine andere Reihe sein? Wenn es dieselbe Zeile ist, können Sie die vorgeschlagene Abfrage verwenden oder automatisch erhöhen. Wenn es sich um eine andere Zeile handelt, müssen Sie Ihre Abfrage in zwei Abfragen aufteilen, eine für die zu aktualisierende Zeile und eine weitere für die Aktualisierung. – rypskar

+0

Du hast die gleiche Zeile als Einfügung aktualisiert ... lass mich das versuchen ... danke – user3209031