2017-02-02 3 views
0

UNIONで結合された2つのクエリを含むSQLクエリを作成し、返される行数を制限する必要があります。Yii2はユニオンとリミットを使用してクエリを作成します

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

問題はLIMIT句が最初のクエリと括弧で囲まれていることです。この結果、2番目のクエリにはLIMIT句がありません。

サブクエリ以外のクエリ全体に対してLIMIT句を指定する必要があります。

+0

私はあなたが2つのソリューションを持っていると思います。 1)sqlが単純な場合は、sqlを直接記述します。 2)SQLが複雑な場合は、SQLからビューを作成し、Yiiから呼び出します。 –

+0

@FabrizioCaldarelliさんがお手伝いをしてくれてありがとうございます。すでに生の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 
関連する問題