我有一个查询,给出的结果像
id | productid | userid | coinsid
1 | 2 | 2 | 5
3 | 2 | 2 | 6
4 | 2 | 3 | 7
5 | 2 | 4 | 8
6 | 2 | 3 | 9
这是针对特定结果的productid
。现在,我必须user table
通过向上述结果中的所有用户添加$ 1来更新余额,但是如果userid
是两次,则需要向该特定用户的余额中添加$ 1两次。因此,在上述情况下,$ 1两次添加到userid=2
余额和userid=3
余额中。
简单的方法是对每个不同的记录进行计数,userid
并在有用户foreach
循环的情况下运行查询。但是我正在寻找一些优化方法。请提出任何建议。谢谢
一种方法:
UPDATE user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
SET u.balance = u.balance + r.deposit
我们使用原始的OP查询来返回显示的结果集,并使其成为一个内联视图(在上面的查询中以q别名)。
由此,我们查询一个不同的用户ID列表,以及该用户ID在结果集中出现的次数。这给了我们用户名和存款金额(每次出现用户ID时为1美元)(某些数据库可能希望我们将值指定为1.0而不是1,以确保它是十进制。我认为SUM更能代表我们正在努力实现的目标。)
我们将该内联视图(r)加入到用户表中,并将该用户的存款金额添加到当前余额中(假设余额存储为十进制美元(1.00 = 1美元)
要进行测试,请将转换UPDATE
为以下SELECT
语句:
SET
”子句ORDER BY
”子句(可选)以使结果确定UPDATE
”关键字并替换它和:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM
全选:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
注意没有WHERE子句,JOIN谓词(在ON子句中)是确定在用户表中选择/影响哪些行的因素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句