2
以下は純粋なSQLクエリです。Yiiフレームワーク2の結合機能でサブクエリを使用する方法ActiveRecord?
SELECT a.*, b.*
FROM a
INNER JOIN b
ON a.id = b.a_id
INNER JOIN (
SELECT a_id, MAX(add_time) AS max_add_time
FROM b
GROUP BY a_id
) m
ON b.a_id = m.a_id AND b.add_time = m.max_add_time
ORDER BY b.add_time DESC
2番目のサブクエリはINNER JOIN
です。私のアクティブなクエリの下。
$subQuery = B::find()->select(['a_id', 'MAX(add_time) AS max_add_time'])->groupBy('a_id');
$query = A::find()->innerJoin('b', 'a.id = b.a_id')
->innerJoin('(' .
$subQuery->prepare(Yii::$app->db->queryBuilder)
->createCommand()
->rawSql
. ') m', 'b.a_id = m.a_id AND a.add_time = m.max_add_time ')
->orderBy('b.add_time DESC');
それは正常に動作しますが、私は二INNER JOIN
でサブクエリを使用する方法が好きではありません。私がこのクエリでアプローチしたいのは、右テーブルで左テーブル内部結合を選択し、グループをa_id
で、右テーブルのadd_time(DESC)で並べ替えることです。 2番目のINNER JOINでサブクエリをうまく使うべきですか?
Thanks a ton bro。私は先月から苦しんでいましたが、ついにこの解決策を得ました。 – Rahul
優れたソリューション、素晴らしい仕事! –