テーブルの特定の行を番号の小さい順に更新するコードを記述しました。正しい行を選択するには、私は2つのテーブルを結合する必要があります。テーブルの最後の行は0の値を持ち、2番目の値は-1です。これを達成するために私はORDER BY DESCを使用します。私の読書は、私は、UPDATEを使用して、一緒BY JOINとORDERことができないことを示唆しているUPDATEとORDER BYの不正な使用
BY UPDATEおよびORDERの
誤った使用方法:残念ながら、私のコードは次のようなエラーが表示されます。サブクエリが助けになるかもしれないと私は読んだことがありますか?私はこれを行うために私のコードをどのように変更するか考えていません。おそらく誰かが修正版を投稿してうまくいくでしょうか?
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());
}
ORDER BYを使用しない場合、番号シーケンスは間違った方向になります。 – nico55555
UPDATEステートメントのORDER BYは、並行性の高い環境で行ロック・テーブルにデッドロックが発生しないようにするのに便利です – Spredzy
order byを使用して、一意の制約を持つ列を変更して、競合するキーには当たらない。たとえば、優先順位またはシーケンスの列がある場合、特定の値を超えるすべてのシーケンス番号を減らすことが望ましい場合があります。その列で昇順に注文すれば、重複するキーがないことを確認できます。 – jcbwlkr