UPDATE和ORDER BY的使用不正确

时间:2011-11-14 01:33:25

标签: php mysql

我编写了一些代码来更新数字序列递减的表格的某些行。要选择正确的行,我必须加入两个表。表中的最后一行需要值为0,第二行需要为-1,依此类推。为此,我使用ORDER BY DESC。不幸的是,我的代码会出现以下错误:

UPDATE和ORDER BY

的使用不正确

我的阅读建议我不能同时使用UPDATE,JOIN和ORDER BY。我读过,也许子查询可能会有所帮助?我真的不知道如何更改我的代码来执行此操作。也许有人可以发布一个有效的修改版本?

while($row = mysql_fetch_array( $result )) {

$products_id = $row['products_id'];
$products_stock_attributes = $row['products_stock_attributes']; 

mysql_query("SET @i = 0");

$result2 = mysql_query("UPDATE orders_products op, orders ord

                   SET op.stock_when_purchased = (@i:=(@i - op.products_quantity)) 
                   WHERE op.orders_id = ord.orders_id 
AND op.products_id = '$products_id' 
AND op.products_stock_attributes = '$products_stock_attributes' 
AND op.stock_when_purchased < 0 
AND ord.orders_status = 2

ORDER BY orders_products_id DESC") 
or die(mysql_error());  
}

3 个答案:

答案 0 :(得分:1)

只需在UPDATE语句中删除ORDER BY,然后将其放入SELECT语句中。

样品:

$query = "SELECT ........ ORDER BY ..."
$result = mysql_query($query);

while(....){.... }

UPDATE语句不接受ORDER BY子句。

答案 1 :(得分:0)

为什么在更新中需要订单?我想你可以删除它,你更新将更新所有尊重你的where语句。

编辑:也许你可以调用存储过程来简化代码

答案 2 :(得分:0)

您可以使用SELECT来循环播放这些行,并在其中添加WHEREORDER BY语句,然后在while($row = mysql_fetch_assoc($query)){循环中使用{&#39}。 d有你的UPDATE table SET key = 'value' WHERE id = '{$row['id']}'声明。

当然,这需要经常执行mysql_query(),但它仍然运行得非常快,只是单个查询的速度不同。