2017-02-02 2 views
0

Ich muss eine SQL-Abfrage erstellen, die zwei Abfragen kombiniert von UNION enthält und Anzahl der zurückgegebenen Zeilen begrenzen.Yii2 eine Abfrage mit Union und Limit erstellen

$query = $queryOne 
     ->union($queryTwo) 
     ->limit($this->limit) 
    ; 

Das Problem ist, dass die LIMIT Klausel in Klammern mit der ersten Abfrage eingeschlossen ist. Daher hat die zweite Abfrage keine Klausel LIMIT.

Ich muss die LIMIT Klausel für die gesamte Abfrage nicht für eine Unterabfrage angeben.

+0

Ich denke, dass man zwei Lösungen haben; 1) Wenn sql einfach ist, schreibe sql direkt; 2) Wenn sql komplex ist, erzeuge eine Ansicht von sql und rufe sie dann von Yii auf; –

+0

@ FabrizioCaldarelli danke für die Hilfe. Habe bereits eine Lösung gefunden, ohne rohe SQL zu hacken. – Kolyunya

Antwort

1

Sie erhalten eine dritte Abfrage müssen das Problem etwas elegant zu lösen:

$query = (new Query) 
     ->select('*') 
     ->from([ 
      $queryOne->union($queryTwo), 
     ]) 
     ->offset($offset) 
     ->limit($limit) 
    ; 

Related.

1

Versuchen Sie, diese untenstehenden Link Antworten:

http://stackoverflow.com/questions/31017595/yii2-how-to-create-activedataprovider-with-union-query-and-sorting