/** * builds the from and where restrictions of the current query * @param string &$strQuery * @param string[] &$arrParameters * @return void */ private function internalBuildQuery(&$strQuery, &$arrParameters) { $strQuery .= "FROM " . _dbprefix_ . "search_ix_document AS D\r\n INNER JOIN " . _dbprefix_ . "search_ix_content AS z\r\n ON search_ix_content_document_id = search_ix_document_id\r\n " . ($this->objMetadataFilter != null ? " LEFT JOIN " . _dbprefix_ . "system ON search_ix_system_id = system_id " : "") . "\r\n WHERE 1=1 "; //metadata filter if ($this->objMetadataFilter != null) { $this->objMetadataFilter->getQuery($strQuery, $arrParameters); } $strQuery .= " AND z.search_ix_content_content LIKE ? AND D.search_ix_document_id = z.search_ix_content_document_id "; $arrParameters[] = $this->getObjTerm()->getStrText() . "%"; if ($this->getObjTerm()->getStrField() != null) { $strQuery .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $this->getObjTerm()->getStrField(); } }
/** * Adds the queried tables and the filter-restrictions to the generated query * @param string $strQuery * @param string[] $arrParameters */ private function internalBuildQuery(&$strQuery, &$arrParameters) { $strQuery .= "FROM (SELECT search_ix_document_id, search_ix_system_id from " . _dbprefix_ . "search_ix_document AS D\r\n " . ($this->objMetadataFilter != null ? " LEFT JOIN " . _dbprefix_ . "system ON search_ix_system_id = system_id " : "") . "\r\n WHERE "; $strWhereMust = "1=1 "; // metadata filter if ($this->objMetadataFilter != null) { $this->objMetadataFilter->getQuery($strWhereMust, $arrParameters); } /* @var $objTerm class_module_search_term */ foreach ($this->arrMustNotOccurs as $objTerm) { $strWhereMust .= "AND NOT EXISTS (select 1 from " . _dbprefix_ . "search_ix_content WHERE search_ix_content_content= ? " . ($objTerm->getStrField() != null ? " AND search_ix_content_field_name = ? " : "") . " AND search_ix_document_id = search_ix_content_document_id) "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $arrParameters[] = $objTerm->getStrField(); } } /* @var $objTerm class_module_search_term */ foreach ($this->arrMustOccurs as $objTerm) { $strWhereMust .= "AND exists (select 1 from " . _dbprefix_ . "search_ix_content WHERE search_ix_content_content= ? " . ($objTerm->getStrField() != null ? " AND search_ix_content_field_name = ? " : "") . " AND search_ix_document_id = search_ix_content_document_id) "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $arrParameters[] = $objTerm->getStrField(); } } $strQuery .= $strWhereMust . ") a "; $arrMustShouldTerms = array(); /* @var $objTerm class_module_search_term */ foreach ($this->arrMustOccurs as $objTerm) { $strWhere = " (search_ix_content_content = ? "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $strWhere .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $objTerm->getStrField(); } $strWhere .= ")"; $arrMustShouldTerms[] = $strWhere; } /* @var $objTerm class_module_search_term */ foreach ($this->arrShouldOccurs as $objTerm) { $strWhere = " (search_ix_content_content = ? "; $arrParameters[] = $objTerm->getStrText(); if ($objTerm->getStrField() != null) { $strWhere .= "AND search_ix_content_field_name = ? "; $arrParameters[] = $objTerm->getStrField(); } $strWhere .= ")"; $arrMustShouldTerms[] = $strWhere; } $strQuery .= "INNER JOIN (select search_ix_content_document_id, search_ix_content_score from " . _dbprefix_ . "search_ix_content where " . implode(" OR ", $arrMustShouldTerms) . ") z\r\n ON search_ix_document_id = search_ix_content_document_id"; }