2017-02-02 2 views
0

Мне нужно построить SQL-запрос, содержащий два запроса, объединенные в UNION и ограничить количество возвращаемых строк.Yii2 построить запрос с объединением и ограничением

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

Проблема заключается в том, что положение LIMIT заключен в скобках с первым запросом. В результате этого второго запроса не существует LIMIT.

Мне нужно указать предложение LIMIT для всего запроса не для подзапроса.

+0

Я думаю, что у вас есть два решения; 1) если sql просто, напишите sql напрямую; 2) если sql сложный, создайте представление из sql, а затем вызовите его из Yii; –

+0

@FabrizioCaldarelli благодарит за помощь. Уже найдено решение без взлома raw SQL. – Kolyunya

ответ

1

Вам потребуется третий запрос, чтобы решить эту проблему несколько элегантно:

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

Related.

1

Попробуйте ниже ответов ссылки:

http://stackoverflow.com/questions/31017595/yii2-how-to-create-activedataprovider-with-union-query-and-sorting 
Смежные вопросы