我编写了一些代码来更新数字序列递减的表格的某些行。要选择正确的行,我必须加入两个表。表中的最后一行需要值为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());
}
答案 0 :(得分:1)
只需在UPDATE语句中删除ORDER BY,然后将其放入SELECT语句中。
样品:
$query = "SELECT ........ ORDER BY ..."
$result = mysql_query($query);
while(....){.... }
UPDATE语句不接受ORDER BY子句。
答案 1 :(得分:0)
为什么在更新中需要订单?我想你可以删除它,你更新将更新所有尊重你的where语句。
编辑:也许你可以调用存储过程来简化代码
答案 2 :(得分:0)
您可以使用SELECT
来循环播放这些行,并在其中添加WHERE
和ORDER BY
语句,然后在while($row = mysql_fetch_assoc($query)){
循环中使用{&#39}。 d有你的UPDATE table SET key = 'value' WHERE id = '{$row['id']}'
声明。
当然,这需要经常执行mysql_query()
,但它仍然运行得非常快,只是单个查询的速度不同。