Mysql YII2如何使用查询生成器更新字段
如何使用Yii2中的查询生成器更新字段 要求是表B中的每笔交易表A将自动更新值字段:实际和可用 表AMysql YII2如何使用查询生成器更新字段,mysql,activerecord,yii2,query-builder,insert-update,Mysql,Activerecord,Yii2,Query Builder,Insert Update,如何使用Yii2中的查询生成器更新字段 要求是表B中的每笔交易表A将自动更新值字段:实际和可用 表A 身份证 预算 实际//查询表b中的金额 可用//值=(预算-实际) 表B 身份证 数量 表格id 表关系 这里是sql查询 SELECT DISTINCT(A.id) AS tableA, A.budget AS budget, SUM(B.amount) AS actual, budget - SUM(B.amount) AS Available FROM tab
- 身份证
- 预算
- 实际//查询表b中的金额
- 可用//值=(预算-实际)
- 身份证
- 数量
- 表格id
SELECT
DISTINCT(A.id) AS tableA,
A.budget AS budget,
SUM(B.amount) AS actual,
budget - SUM(B.amount) AS Available
FROM
tableA AS A
LEFT JOIN
TableB AS B
ON
A.id = B.TableA_id
Group By
tableA
结果
我正在努力向你学习
但我不知道如何将SQL应用于Yii2中的查询生成器,也不知道如何编码,也不知道如何将代码放入模型或控制器中 一个简单的解决方案可以基于sql命令(而不是activeQuery)
我已经重新编译了您的代码,避免了我之前评论中的问题,为什么不创建一个包含计算值的视图呢?因此,当您访问视图时,“实际”和“可用”数据是动态计算的。您的sql代码似乎有一些问题。。1) 为什么不同和不同??如果使用group by,则不需要使用distinct..2)为什么group by中没有提到非聚合列。。这在sql中是不推荐使用的,在较新版本的数据库中是不允许的,例如:mysql 5.73)您不能在“选择其他列名”或“计算”(预算)中为列名使用别名。您想做什么?您想
更新
记录还是想选择
,您的问题标题是关于update
,并且您添加了select
查询以转换为QueryBuilder
语法?很抱歉造成混淆。我的注意力是update
value,先生,谢谢你的回答。先生,您能告诉我您的建议代码放在哪里吗。在_form.php或模型表或控制器中tableA@ChonjaroenChauynoo你的评论中还有一个问题。。您已要求在加入解决方案中进行SQL更新。。我还发了一封asnwer。。因此,在非编码服务中,在问题之间添加问题是不公平的。。因此,如果我的答案是正确的,你可以将其标记为接受如果我的答案是错误的,你可以向我显示错误。。但不是在另一个问题上添加问题question@ChonjaroenChauynoo将其添加到模型中创建一个函数,并通过用于更新模型中的值的操作调用它controller@scaisEdge再次感谢您的回答,并为错误道歉。请让我先试试你的陈述,完成后我会给你更新。@MuhammadOmerAslam谢谢你的建议,先生
\Yii::$app->db->createCommand('update TableA A
inner join (
select B.TableA_id id
, sum(B.amount) Available
FROM TableB B
GROUP BY id
) T on A.id =T.id
AND A.id = :actid
set budget = budget - T.Available')->bindValue(':actid', $your_id)
->execute();