あなたが行を取得するために、変数を使用することができます関心が、一緒にあなたがレコードを更新するために必要な情報を持つ:
SELECT *
FROM (
SELECT `Qty in acquisto`,
`Prezzo in acquisto`,
@take := least(`Qty in acquisto`, @needed) as taken,
`Qty in acquisto` - @take as adjusted_acquisto,
@needed := @needed - @take as still_needed
FROM book,
(select @needed := 5) as init
ORDER BY `Prezzo in acquisto` DESC) base
WHERE taken + still_needed > 0
サンプルデータの出力は次のようになります。
| Qty in acquisto | Prezzo in acquisto | taken | adjusted_acquisto | still_needed |
|-----------------|--------------------|-------|-------------------|--------------|
| 2 | 1000 | 2 | 0 | 3 |
| 10 | 960 | 3 | 7 | 0 |
は別名で、最も内側のクエリでSQL fiddle
を参照してくださいinitでは、必要な本の数を渡します(この例では5)。
だから、列adjusted_acquisto
にあなたが削除して更新を実行する必要がある値を見つける:その値が0の場合、対応するレコードを削除し、
を。
この値は0ではないため、その値でQtyを更新します。
は、あなたのテーブルには、あなたがそうあなたは、第1、第2、... – trincot
必ず、「acquistoで数量」がされているレコードを知ることにより、注文する際に使用できるIDか何かを持っています最初の列の名前、「取得するPrezzo」は2番目の列の名前です。しかし、私はテーブルの上で最高の価格をさせる方法で、降順で 'acquizo'で 'Prezzo'で注文する必要があります。 – pirusti