从数据库中的多个行中删除数量

时间:2012-05-11 19:31:40

标签: mysql

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

行:

+----+-----+
| id | qty |
+----+-----+
|  1 |   0 |
|  2 |   5 |
|  3 |   5 |
|  4 |  10 |
+----+-----+

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

+----+-----+
| id | qty |
+----+-----+
|  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 = ?`
    
  4. 我的问题:在MySQL中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:5)

SET @q = 12;

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

sqlfiddle上查看。