我有一个问题是这样的。
select t.id,
t.ad_id,
sum(t.impression) total_impression,
sum(t.view) total_views,
sum(t.clicks) total_clicks,
t.publisher_id,
i.budget,
i.name_of_campaign
from
(select id,
ad_id,
max(impression) impression,
max(view) view,
max(clicks) clicks,
visitor_ip,
publisher_id
from ad_analytics
group by ad_id, visitor_ip) t
inner join inventory i
on i.id = t.ad_id
group by t.ad_id;
我想把同样的转换成yii2。我写的问题是。
//For model
use frontend\models\Inventory;
use frontend\models\Adanalytics;
对于同一模型中的栅格视图。
$ivcsubquery = Adanalytics::find()->
select('id,ad_id,date_event,max(cpc) cpclick,max(cpv) cpview,max(impression) impression,max(view) view,max(clicks) clicks,visitor_ip,publisher_id')->
from('ad_analytics')->
where(['publisher_id' => Yii::$app->user->identity->id ])->
groupBy('ad_id,date_event,visitor_ip');
$ivcquery=Adanalytics::find()->
// $subquery = select('id,ad_id,max(impression) impression,max(view) view,max(clicks) clicks,visitor_ip,publisher_id')->
// from('ad_analytics'),
//where(['publisher_id' => Yii::$app->user->identity->id ])->
select('t.ad_id,t.date_event,sum(t.cpclick) total_click_cost,sum(t.cpview) total_view_cost,sum(t.impression) total_impression,sum(t.view) total_views,sum(t.clicks) total_clicks,t.publisher_id')->
from(['t'=>$ivcsubquery])->
groupBy('t.ad_id,t.date_event');
$query = Inventory::find()->
where(['publisher_name' => Yii::$app->user->identity->id ])->
andWhere('ending_date>= NOW()')->
andWhere('paid=1')->
andWhere('status=1');
$joinquery = "Really I don't know what to write down here";
在我的网格视图中看起来像这样。
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'id',
'user_id',
'placed_date',
'name_of_campaign',
'budget',
//'start_date',
//'platformType',
'titleOfTheVideo',
'videoUrl',
'ending_date',
]
也可以用上述方法调用列如何解决此问题?
4条答案
按热度按时间vs3odd8k1#
尝试此查询。此查询将记录作为数组返回。
vjhs03f72#
这个任务是一次性的,听起来像是“只从旧数据库中获取那些订单,新数据库中提供了有关这些订单的信息。”
oymdgrw73#
如果您编写的rawsql查询使用phpmyadmin或任何其他实用程序在表上运行时得到所需的结果,则可以将其转换为以下内容。
只需确保用于连接其他表的外键应该在select中指定,否则可能会出现类似columnnotfound/或unknown列的错误。
ki0zmccv4#
如果您有一个有效的sql查询,您可以考虑使用
SqlDataProvider
而不是重写整个查询: