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

时间:2014-07-11 06:43:46

标签: mysql sql

我有一张这样的表

tbl_user

id
user_id
amount

首先我想根据id

更新一行
$amount = 123; // dyanamic value
$sql = "UPDATE tbl_user SET amount=amount-'$amount' WHERE id='$id' LIMIT 1 ";

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

$sql = "SELECT amount FROM tbl_user  WHERE id='$id'  LIMIT 1 ";

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

5 个答案:

答案 0 :(得分:27)

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

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

 SELECT @amount;

您可以做的最好的事情是创建Stored Procedure之类的:

 DELIMITER //

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

    SELECT @amount;
 END //

然后PHP中的call Stored Procedure

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

 UPDATE tbl_user SET amount=amount-'$amount' 
 WHERE id='$id' LIMIT 1
 RETURNING amount

请参阅here

答案 1 :(得分:4)

一个功能可以轻松完成。听起来您想要限制代码连接到数据库的次数。使用存储的函数或过程,您只进行一次连接。是的,存储的函数在其中有两个查询(更新然后选择),但这些查询在服务器端执行而不停止到客户端的往返。

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');

建议的功能:

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
//

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

SELECT incrementAmount('1', 5.00)

查询结果为:

105

答案 2 :(得分:1)

使用单个查询是不可能的,但您可以将多个命令组合到一个脚本中,并通过对数据库服务器的单个请求来执行它们。

运行此脚本:

"UPDATE tbl_user SET amount=amount-'$amount' WHERE id='".$id."';SELECT amount FROM tbl_user  WHERE id='".$id."'; "

此外,您可能想检查$ id是否为数字,因为我没有在代码中看到针对SQL注入的保护。 SQL注入是一个严重的威胁,你最好做好准备并保护自己免受攻击。

答案 3 :(得分:1)

这是程序

CREATE PROCEDURE UpdateAndSelect
(
    @amount MONEY,
    @id INT
)
AS
BEGIN

   UPDATE tbl_user
   SET amount = @amount
   WHERE id = @id
   LIMIT 1

   SELECT amount
   FROM tbl_user
   WHERE id = @id
   LIMIT 1

END
GO

您可以通过设置变量(@amoutn和@id)然后调用来调用此存储过程:

exec UpdateAndSelect

希望这有助于解决您的问题

答案 4 :(得分:1)

你好 Satish Sharma

我已更新代码

UPDATE  tbl_user  SET id = LAST_INSERT_ID(id),  amount = 2.4,user_id=4 WHERE id = 123;

// SELECT
$id =SELECT LAST_INSERT_ID();
SELECT amount,user_id FROM tbl_user  WHERE id = $id   LIMIT 1

要求进一步澄清。

由于