union() public method

Appends a SQL statement using UNION operator.
public union ( string | Query $sql, boolean $all = false )
$sql string | Query the SQL statement to be appended using UNION
$all boolean TRUE if using UNION ALL and FALSE if using UNION
Example #1
0
 protected function _prepareQuery()
 {
     if (!$this->_query_string) {
         throw new \Exception("Error query string cannot be empty");
     }
     $q = $this->_query_string;
     $queryArticle = new Query();
     $queryArticle->select('name, preview_text, seourl, image')->from('article')->where(['like', 'name', $q])->orWhere(['like', 'preview_text', $q])->orWhere(['like', 'detail_text', $q])->orWhere(['like', 'soc_text', $q])->orWhere(['like', 'title', $q])->limit(10);
     $queryStructure = new Query();
     $queryStructure->select('label AS name, description AS preview_text, seourl, image')->from('structure')->where(['is_dir' => 0])->andWhere(['or', ['like', 'label', $q], ['like', 'content', $q], ['like', 'info', $q], ['like', 'title', $q]])->limit(10);
     $queryArticle->union($queryStructure);
     return $queryArticle;
 }
Example #2
0
 /**
  * Loads the messages from database.
  * You may override this method to customize the message storage in the database.
  * @param string $category the message category.
  * @param string $language the target language.
  * @return array the messages loaded from database.
  */
 protected function loadMessagesFromDb($category, $language)
 {
     $mainQuery = new Query();
     $mainQuery->select(['t1.message message', 't2.translation translation'])->from(["{$this->sourceMessageTable} t1", "{$this->messageTable} t2"])->where('t1.id = t2.id AND t1.category = :category AND t2.language = :language')->params([':category' => $category, ':language' => $language]);
     $fallbackLanguage = substr($language, 0, 2);
     if ($fallbackLanguage != $language) {
         $fallbackQuery = new Query();
         $fallbackQuery->select(['t1.message message', 't2.translation translation'])->from(["{$this->sourceMessageTable} t1", "{$this->messageTable} t2"])->where('t1.id = t2.id AND t1.category = :category AND t2.language = :fallbackLanguage')->andWhere("t2.id NOT IN (SELECT id FROM {$this->messageTable} WHERE language = :language)")->params([':category' => $category, ':language' => $language, ':fallbackLanguage' => $fallbackLanguage]);
         $mainQuery->union($fallbackQuery, true);
     }
     $messages = $mainQuery->createCommand($this->db)->queryAll();
     return ArrayHelper::map($messages, 'message', 'translation');
 }