Yii2中多条件查询

问题描述 投票:0回答:1

我有一个可能很愚蠢的问题。在 Yii2 中,我有这个 $query (由 self::find() 声明)和一些基本条件:

        $query->andWhere(['>=', 'mrd.created', $start_date]);
        $query->andWhere(['<=', 'mrd.created', $end_date. ' 23:59:59']);

我想通过此选择返回的结果:从

user_id
created
$start_date
同时具有
end_date
但不依赖于
cons_debit
created

$result = $query->select(['mrd.user_id', 'SUM(mrd.actual_revenue) AS total_revenue', 
         'cons_debit' => new \yii\db\Expression('SUM(CASE WHEN mrd.fail_date BETWEEN :from_date AND :to_date THEN mrd.cons_debit ELSE 0 END)', [
                ':from_date' => $start_date,
                ':to_date' => $end_date. ' 23:59:59',
            ])])
                ->groupBy(['mrd.user_id'])
                ->offset(max($params['page'] - 1, 0) * $params['limit'])
                ->orderBy(['total_revenue'=>SORT_DESC])
                ->limit($params['limit'])
                ->asArray()
                ->all();

我遇到的问题是

cons_debit
选择。我只想检索在
fail_date
from_date
之间具有
to_date
的 SUM(cons_debit) (不依赖于
mrd.created
)。

我可以通过 2 个查询得到这个结果,但我想知道是否有任何方法可以在一个查询中实现这一目标。

非常感谢

php sql yii2
1个回答
0
投票

我找到了答案,这很简单:v

$result = $query->select(['mrd.user_id', 'SUM(mrd.actual_revenue) AS total_revenue', 
                 '(SELECT SUM(cons_debit) FROM mass_revenue_date WHERE user_id = mrd.user_id AND fail_date BETWEEN :from_date AND :to_date) AS cons_debit',])
                ->groupBy(['mrd.user_id'])
                ->offset(max($params['page'] - 1, 0) * $params['limit'])
                ->orderBy(['total_revenue'=>SORT_DESC])
                ->params([
                    ':from_date' => $start_date,
                    ':to_date' => $end_date,
                ])
                ->limit($params['limit'])
                ->asArray()
                ->all();
© www.soinside.com 2019 - 2024. All rights reserved.