首页 > 解决方案 > 在 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) 的值不能为负数。

任何帮助,将不胜感激。

非常感谢大家!

标签: mysql

解决方案


听起来您需要为这项工作编写一个过程,因为您需要更新多行。

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 变量添加到过程并返回所需的值。我希望这对您有所帮助,作为进一步搜索的起点。


推荐阅读