php - 从 SQL select sum group by 到 Yii 框架中的 Active Record 2

标签 php mysql sql yii2

下面是我的纯 SQL 查询。

SELECT SUM(money) AS total_money, user_id 
FROM User 
INNER JOIN Person 
        ON Person.user_id = User.user_id 
GROUP BY user_id

如何将这个纯查询转换为 Yii 框架 2 中的 ActiveRecord?我可以解决 INNER JOIN 但不知道如何使用 Yii 2 ActiveRecord 解决 SUM 包括 GROUP BY

最佳答案

选择部分:

use yii\db\Expression;

...

->select([new Expression('SUM(money) as total_money'), 'user_id'])

GROUP BY 部分:

->groupBy('user_id')

select() 的文档和 groupBy()可以在 Query Builder 中找到部分。

yii\db\Expression用于防止引用。

您不能使用sum()方法在这里,因为它是聚合方法并返回一个数字,而在您的情况下,您将它与其他列一起使用以返回一组记录。

整个查询将如下所示:

$personTable = Person::tableName();
$userTable = User::tableName();

$users = User::find()
    ->select([new Expression('SUM(money) as total_money'), 'user_id'])
    ->innerJoin($personTable, "$personTable.user_id = $userTable.user_id")
    ->groupBy('user_id')
    ->all()

还有一些事情要提:

  • 最好使用tableName()方法来获取实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名称,则只需在一处更改即可。
  • 最好将连接部分替换为 relation .

关于php - 从 SQL select sum group by 到 Yii 框架中的 Active Record 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079914/

相关文章:

php - 始终在 Wordpress 中使用 the_post_pagination 显示下一页/上一页

php - Mysqli fetch array 警告,无法调试

mysql - 为什么会出现此错误 #1071 - 指定的 key 太长;最大 key 长度为 1000 字节?

sql - 如何在 Laravel 中编写将两列组合作为单个查询的条件查询?

mysql - 带有数据聚合的 SQL 循环

sql - 跟踪表中值更新的时间

php - 使用 javascript 访问 php 文件中的 session 变量?

php - PDO getColumnMeta() 的 PHP native_type 列表

php - 将表单 POST 提交到另一个页面,但在重定向之前进行验证,如果验证失败,则保留在同一页面上

mysql - 如何在 Mysql 中将人类日期转换为 unix 时间戳?