这是我的表结构:
table
。id
(自动递增;主键)
table
。qty
(可能的值:0 - 1000)
行:
+----+-----+ | id | qty | +----+-----+ | 1 | 0 | | 2 | 5 | | 3 | 5 | | 4 | 10 | +----+-----+
我想减少12的可用数量。意思是,新的结果应该是:
编辑:我可能应该指定所有这些数字是任意的。它们可以是任何东西。
+----+-----+ | id | qty | +----+-----+ | 1 | 0 | | 2 | 0 | | 3 | 0 | | 4 | 8 | +----+-----+
现在,我执行以下操作:
SELECT id, qty FROM table WHERE qty > 0 LIMIT 12
过滤所有数据,找出每行要删除的数量
使用PDO预处理语句批量更新受影响的行:
UPDATE `table` SET qty = ? WHERE id = ?`
我的问题:在MySQL中有没有办法做到这一点?
答案 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上查看。