我有一个members
表,列amount
已经有一个整数值,我希望添加到该值,然后使用其内容更新另一个名为{{1}的表保留了被记入的金额和新的余额(即添加后)
accounts
这是我上面的查询,我试图从 $this->query_array = array(':amt' => $amount, ':uid' => $userid, ':dat' => $date );
$this->query_string = "UPDATE members SET amount = amount + :amt;
INSERT INTO accounts VALUES ( :uid, :amt, members.amount + :amt, :dat);";
查询中获取members.amount
表并在update
查询中使用它是否有更好的方法,一个比我更有效的方法试过。
示例数据:
insert
Members Table userid amount
---------------------
u123 4000
y123 5000
Accounts Table userid credit balance date
目前是空的,所以我想做的是在memebrs表中为所有值添加300,然后插入这样的帐户。
Accounts table
答案 0 :(得分:0)
选择查询是一个简单的插入,唯一的问题是关于日期
INSERT INTO Accounts (userid, credit, balance, date)
SELECT userid, 300, amount, NOW()
FROM Members;
答案 1 :(得分:0)
我会使用insert ... select ...语句来实现所需的输出:
INSERT INTO accounts
SELECT members.userid, :amt, members.amount, :dat FROM members
注意:
我使用members.amount
代替members.amount + :amt
,因为:amt
已添加一次members.amount
。
您的更新语句会更新members
表中的所有记录,但insert语句只会为特定用户创建记录。我相信您应该仅将更新语句限制为特定用户,或者不将插入限制为特定用户。我选择了后一种方法。
如果你想以非规范化的方式存储余额,那么我宁愿在账户表上使用触发器来更新成员表中的余额,而不是使用2个语句。