我的项目中有一个yii2查询,例如
$query=Car::find()
->andFilterWhere(['in','make_id',array_filter(explode(',', $this->makes))])
->andFilterWhere(['in','model_id',array_filter(explode(',', $this->models))])
->andFilterWhere(['>=', 'price', $this->price_start])
->andFilterWhere(['<=', 'price', $this->price_end])
->andFilterWhere(['>=', ModelYear::tableName().'.year', $this->year_start])
->andFilterWhere(['<=', ModelYear::tableName().'.year', $this->year_end])
->andFilterWhere(['>=', 'kilometer', $this->km_start])
->andFilterWhere(['<=', 'kilometer', $this->km_end])
->andFilterWhere(['like', 'title', $this->title])
我也有另一个查询,例如
$command = $connection->createCommand("select A.id,A.make_eng,Count(B.make_id)
from tbl_car_makes A,(**Can i use the first $query here**) as B where A.id=B.make_id group by A.id,A.make_eng");
$data = $command->queryAll();
如何在指定位置的第二个查询中使用第一个查询
答案 0 :(得分:0)
您有两种选择方法。
1)也许更好的选择是对第二个查询也使用查询生成器。
$query2 = (new \yii\db\Query())
->select(['A.id', 'A.make_eng', 'COUNT(B.make_id)')
->from(['A' => 'tbl_car_makes', 'B' => $query])
->where('A.id = B.make_id')
->groupBy(['A.id', 'A.make_eng']);
$data = $query2->all();
2)另一个选择是将第一个查询转换为SQL字符串。这种方法的问题在于您将不得不处理参数。
$queryCommand = $query->createCommand();
$querySql = $queryCommand->getSql();
$command = $connection->createCommand(
"select A.id,A.make_eng,Count(B.make_id) from tbl_car_makes A,($querySql) as B where A.id=B.make_id group by A.id,A.make_eng",
$queryCommand->params
);
$data = $command->queryAll();