0

テーブルに既にある最高の final_id を選択し、+1 を追加して、final_id を更新するのに問題があります。

以下のクエリはエラーを出力します:「FROM 句で更新するターゲット テーブル 'customer_orders' を指定できません」。残念ながらその理由がわかりません..

UPDATE customer_orders 
  SET final_id = (SELECT final_id FROM customer_orders ORDER BY final_id DESC)+1, 
      status = 2, 
      payment_id = '{$transaction_id}', 
      payment_type = '{$type}', 
      payment_reserved = '{$amount}', 
      payment_currency = '{$cur}', 
      payment_cardnopostfix = '{$postfix}', 
      payment_fraud_suspicious = '{$fraud}' 
  WHERE id = '{$order_id}'

システムで確定した注文に固有の増加する ID を設定しようとしています。

誰かが私が間違っていることを教えてくれることを願っています!

よろしくお願いします

4

3 に答える 3

1

クエリを書き直して、結合を使用できます

UPDATE customer_orders 
INNER JOIN (SELECT IFNULL(MAX(final_id),0) as max_id FROM customer_orders)a ON(1=1)
SET final_id = a.max_id+1, status = 2, payment_id = '{$transaction_id}', 
payment_type = '{$type}', payment_reserved = '{$amount}', 
payment_currency = '{$cur}', payment_cardnopostfix = '{$postfix}',
payment_fraud_suspicious = '{$fraud}' 
WHERE id = '{$order_id}'
于 2011-03-31T15:13:22.333 に答える
0

内部クエリを次のように変更しますSELECT max(final_id) FROM customer_orders

于 2011-03-31T15:08:31.067 に答える
0

これを試して:

 UPDATE customer_orders        
    SET final_id = MT.MaxId + 1           -- use the computed max id, and increment
      , status = 2
      , payment_id = '{$transaction_id}'
      , payment_type = '{$type}'
      , payment_reserved = '{$amount}'
      , payment_currency = '{$cur}'
      , payment_cardnopostfix = '{$postfix}'
      , payment_fraud_suspicious = '{$fraud}'
   FROM customer_orders
      -- include a subquery to determine the max id from the customer_orders table
      -- and assign 'MT' as the name of the results table
      , (SELECT MAX(final_id) as MaxId FROM customer_orders) MT
  WHERE id = '{$order_id}'
于 2011-03-31T15:10:42.383 に答える