Php 无法在FROM子句中为update指定目标表“prodt”

Php 无法在FROM子句中为update指定目标表“prodt”,php,mysql,sql-update,max,wamp,Php,Mysql,Sql Update,Max,Wamp,其PHP MYSQL: 我有一个表prodt,在其中我首先插入一个值,并使用它的最后一个插入ID对MAX+1进行更新,如下所示,但我得到了一个错误 无法在FROM子句中为update指定目标表“prodt” $a = db_insert_id(); $sqllast = "UPDATE prodt SET pdname= ((SELECT pdname FROM ( SELECT MAX( pdname ) AS pdname FROM

其PHP MYSQL:

我有一个表prodt,在其中我首先插入一个值,并使用它的最后一个插入ID对MAX+1进行更新,如下所示,但我得到了一个错误

无法在FROM子句中为update指定目标表“prodt”

   $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()); 
            }
注意:pdname不是字符串…它的数字只是例如:1234,因此1234+1将输出我1235

经过研究,我尝试了以下方法:

$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()); 
            }
但仍然不起作用…仍然收到相同的消息…请帮助我

注意:上面的第一个查询在我的WAMP2.5版本中运行良好,今天只有我更新到WAMP3.0,并开始得到相同的错误


感谢第一个错误,您不能使用子查询从要更新的表中进行选择。因此,您必须将其分为两个查询,或者在插入数据时查看是否可以处理它。 在第二个示例中,您在两个子查询上使用了别名pdname,这就是为什么您得到每个派生表都必须有自己的别名

我不确定我是否理解您的表是否正确pdname是字符串还是数字?如果是一个字符串,并且您正在向其中添加整数1,那么如果它是一个整数,那么结果可能不是您所期望的结果。我建议在中重命名它。还有什么是oid?如果该id仅返回新行,则可以将查询更改为以下内容:

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

任何人。。。这里???这里有几个例子:你的第二个查询给你的错误是什么?是同一个错误吗?和上面一样。。。。。很抱歉,它给了我每个派生表都必须有自己的别名,因此我这样做了,但它再次给了我相同的错误。。。请参阅更新问题任何一个。。。请帮助meSorry不是字符串…它的编号仅为:1234,因此1234+1将输出我1235您是在插入时更新同一行,还是可以是任何其他行?如果是同一行,您可以使用我建议的查询,或自动递增。如果是另一行,则必须将查询拆分为两个查询,一个用于查找要更新的行,另一个用于更新该行。