我有一张这样的表
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或任何单个查询结合起来实现上述任务吗?
答案 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
要求进一步澄清。
由于