mysql更新列然后选择更新的值

Sat*_*rma 17 mysql sql

我有一张这样的桌子

tbl_user

id
user_id
amount
Run Code Online (Sandbox Code Playgroud)

首先,我想基于id更新一行

$amount = 123; // dyanamic value
$sql = "UPDATE tbl_user SET amount=amount-'$amount' WHERE id='$id' LIMIT 1 ";
Run Code Online (Sandbox Code Playgroud)

现在我想获得量数列的更新值我已应用此sql

$sql = "SELECT amount FROM tbl_user  WHERE id='$id'  LIMIT 1 ";
Run Code Online (Sandbox Code Playgroud)

我的问题是我可以结合以上sql或任何单个查询来实现上述任务吗?

Edp*_*per 28

你可以模仿的最好的是使用两行查询,可能使用如下变量:

 UPDATE tbl_user SET
     amount = @amount := amount-'$amount'
 WHERE id='$id' LIMIT 1;

 SELECT @amount;
Run Code Online (Sandbox Code Playgroud)

你可以做的最好的事情是创建一个Stored Procedure像:

 DELIMITER //

 CREATE PROCEDURE `return_amount` ()
 BEGIN
    UPDATE tbl_user SET
     amount = @amount := amount-'$amount'
    WHERE id='$id' LIMIT 1;

    SELECT @amount;
 END //
Run Code Online (Sandbox Code Playgroud)

然后打电话给Stored ProcedurePHP.

注意:PostgreSQL有这种选项使用如下所示的RETURNING语句:

 UPDATE tbl_user SET amount=amount-'$amount' 
 WHERE id='$id' LIMIT 1
 RETURNING amount
Run Code Online (Sandbox Code Playgroud)

看到这里


Jos*_*ber 6

一个函数可以很容易地做到这一点。听起来您想限制代码连接到数据库的次数。使用存储函数或过程,您只需建立一个连接。是的,存储的函数内部有两个查询(更新然后选择),但是这些是在服务器端执行的,而不会停下来与客户端进行往返。

http://sqlfiddle.com/#!2/0e6a09/1/0

这是我的桌子骨架:

CREATE TABLE tbl_user (
  id       VARCHAR(100) PRIMARY KEY,
  user_id  VARCHAR(100),
  amount   DECIMAL(17,4) );

INSERT INTO tbl_user VALUES ('1', 'John', '100.00');
Run Code Online (Sandbox Code Playgroud)

和建议的功能:

CREATE FUNCTION incrementAmount
  (p_id VARCHAR(100), p_amount DECIMAL(17,4))
RETURNS DECIMAL(17,4)
BEGIN
  UPDATE tbl_user
SET amount = amount + p_amount
WHERE id = p_id;
  RETURN (SELECT amount FROM tbl_user WHERE id = p_id);
END
//
Run Code Online (Sandbox Code Playgroud)

然后你只需运行一个查询,一个SELECT你刚刚创建的函数:

SELECT incrementAmount('1', 5.00)
Run Code Online (Sandbox Code Playgroud)

查询结果为:

105
Run Code Online (Sandbox Code Playgroud)