mysql - 在 MySQL 中将值从一行“移动”到另一行
问题描述
我对 MySQL 很陌生,我真的不知道如何用谷歌搜索。对不起,如果这是一个愚蠢的问题。
我有一个表,其中包含唯一值对作为主键(userID、somethingID)和一个值。例如,
userID somethingID value
892 10 1
892 9 1
892 0 10
如果 (userID, somethingID = 0 ) 的值大于 0,则用户应该能够减少该值并增加任何其他行的值。在上面的例子中,userID 892 在 somethingID 0 中的值为 10,所以如果他愿意,他可以从该值中取 1 并将其移动到 (892, 9):
userID somethingID value
892 10 1
892 9 2
892 0 9
在这样做之前,我需要添加一个检查以确保 (userID, 0) 的值行大于零。(userID, 0) 的值不能为负数。
任何帮助,将不胜感激。
非常感谢大家!
解决方案
听起来您需要为这项工作编写一个过程,因为您需要更新多行。
DELIMITER $$
CREATE PROCEDURE UpdateValue(
IN _userID INT,
IN _somethingID INT
)
BEGIN
UPDATE tableName SET value = value +1 where userID=_userID and somethingID= _somethingID and userID in (
select userID from tableName where userID=_userID and somethingID= 0 and value >0
);
UPDATE tableName SET value = value -1 where userID=_userID and somethingID= 0 and userID in (
select userID from tableName where userID=_userID and somethingID= 0 and value >0
);
END$$
DELIMITER ;
您可以使用所需的 User Id 和 Something ID 值调用此过程。
CALL UpdateValue(892,9);
如果您需要有关修改的行的其他信息,则可以将 OUT 变量添加到过程并返回所需的值。我希望这对您有所帮助,作为进一步搜索的起点。
推荐阅读
- spring - Spring Boot - 扫描包
- audio - 当数据库级别低于阈值时,FFMPEG 可以暂停实时音频录制吗?
- pandas - 组织 csv。Python中的文件数据
- python-3.x - 跟踪图像中的白色区域
- mongodb - Mongodb shell聚合查询比较日期不返回结果
- java - 图片下载后不显示在图库中
- java - Android 应用程序中的 DropBox
- html - 如何使用 z-index 制作重叠图像的场景并保持设计响应?
- c - 如何修复 Ansi C Tcp 客户端的分段错误?
- postman-pre-request-script - Pre-req Postman 变量停止工作