Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Yii2 :Konvertieren einer Rohabfrage in ActiveRecord

Wenn die von Ihnen geschriebene RawSql-Abfrage die gewünschten Ergebnisse liefert, wenn sie mit phpmyadmin oder einem anderen Dienstprogramm auf der Tabelle ausgeführt wird, können Sie sie in Folgendes umwandeln.

$subQuery = Adanalytics::find()
        ->select([new Expression('[[id]], [[ad_id]], MAX([[impression]]) as impression, max([[view]]) as view, max([[clicks]]) as clicks,[[visitor_ip]],[[publisher_id]]')])
        ->where(['publisher_id' =>  Yii::$app->user->identity->id ])->
        ->groupBy('[[id]], [[visitor_ip]]');

$query = Adanalytics::find()
        ->select([new \yii\db\Expression('t.[[date_event]], t.[[id]], t.[[ad_id]], sum(t.[[impression]]) as total_impression, sum(t.[[view]]) 
         as total_views, sum(t.[[clicks]]) as total_clicks, t.[[publisher_id]], i.[[budget]],i.[[name_of_campaign]]')])
        ->from(['t' => $subQuery])
        ->innerJoin('{{%inventory}} i', 'i.id=t.ad_id')
        ->groupBy('t.ad_id, t.date_event');
$query->all()

Stellen Sie nur sicher, dass die Fremdschlüssel, die Sie zum Verbinden der anderen Tabellen verwenden, in der Auswahl angegeben werden sollten, da es sonst zu einem Fehler wie "Spalte nicht gefunden / oder unbekannte Spalte" kommen kann.