如何在yii2上获取此SQL?

时间:2019-03-09 02:14:44

标签: yii2

我正在使用Yii2,并且需要在内部联接中使用子查询的地方使用查询生成器来转换以下原始SQL查询。

SELECT *
FROM class
INNER JOIN
    (SELECT name, MAX(score) AS Maxscore
    FROM class
    GROUP BY name) topscore 
ON class.name = topscore.name 
AND class.score = topscore.maxscore;

1 个答案:

答案 0 :(得分:0)

您应该代表您付出一些努力,因为它在这里是如此运作,但是,由于您是一只新蜜蜂,所以我要添加一个答案。很简单,请参见查询构建器guide,您需要以以下方式使用子查询

$subQuery = new \yii\db\Query();
$subQuery->select([new \yii\db\Expression('[[name]], MAX([[score]]) as Maxscore')])
    ->from('class')
    ->groupBy('[[name]]');

$query = new \yii\db\Query();
$query->select('*')
    ->from('class')
    ->innerJoin(['topscore'=>$subQuery])
    ->where(['=','class.[[name]]',new \yii\db\Expression('topscore.[[name]]')])
    ->andWhere(['=','class.[[score]]',new \yii\db\Expression('topscore.[[maxscore]]')])
    ->all();

注意:您没有测试它,但是它应该可以正常工作。