1

这是我的表结构:
table. id(自动递增;主键)
tableqty(可能的值:0 - 1000)

行:

+----+-----+
| 编号 | 数量 |
+----+-----+
| 1 | 0 |
| 2 | 5 |
| 3 | 5 |
| 4 | 10 |
+----+-----+

我想将可用数量减少 12。意思是,新结果应该是:
编辑:我可能应该指定所有这些数字都是任意的。他们可以是任何东西。

+----+-----+
| 编号 | 数量 |
+----+-----+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 8 |
+----+-----+

现在,我执行以下操作:

  1. SELECT id, qty FROM table WHERE qty > 0 LIMIT 12

  2. 过滤所有数据以找出要从每行中删除的数量

  3. 使用 PDO 准备语句批量更新受影响的行:

    UPDATE `table` SET qty = ? WHERE id = ?`
    

我的问题:有没有办法在 MySQL 中做到这一切?

4

1 回答 1

5
SET @q = 12;

UPDATE `table`
SET qty = CONCAT(GREATEST(qty - @q, 0), LEFT(@q := @q - LEAST(qty, @q), 0))
ORDER BY id;

sqlfiddle上查看。

于 2012-05-11T19:33:21.690 回答