簡體   English   中英

錯誤使用UPDATE和ORDER BY

[英]Incorrect usage of UPDATE and ORDER BY

我編寫了一些代碼,以遞減的數字順序更新表的某些行。 要選擇正確的行,我必須聯接兩個表。 表中的最后一行的值必須為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());  
}

只需在UPDATE語句中刪除ORDER BY,然后將其放在SELECT語句中即可。

樣品:

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

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

UPDATE語句將不接受ORDER BY子句。

為什么需要更新訂單。 我認為您可以刪除它,而更新將更新所有尊重where語句的內容。

編輯:也許您可以調用存儲的proc來簡化代碼

您可以使用SELECT調用來遍歷所有行,並在其中包含WHEREORDER BY語句,然后在while($row = mysql_fetch_assoc($query)){循環中,您將擁有UPDATE table SET key = 'value' WHERE id = '{$row['id']}'語句。

當然,這將需要大量執行mysql_query() ,但它仍將運行得非常快,只是速度與單個查詢的速度不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM