protected function search($params, $categories) { $contactsDb = new Contacts_Model_DbTable_Contact(); $columns = array('c.id', 'c.name1', 'c.name2', 'a.postcode', 'a.street', 'a.postcode', 'a.city', 'a.country', 'p.phone', 'e.email', 'i.internet'); $query = ''; $schema = 'c'; if ($params['keyword']) { $query = $this->_helper->Query->getQueryKeyword($query, $params['keyword'], $columns); } if ($params['catid']) { $query = $this->_helper->Query->getQueryCategory($query, $params['catid'], $categories, $schema); } if ($params['country']) { $query = $this->_helper->Query->getQueryCountryC($query, $params['country'], 'a'); } if ($query) { $query .= " AND a.type = 'primaryAddress'"; $query .= ' AND c.clientid = ' . $this->_user['clientid']; } $order = $params['order']; if ($order == 'street' || $order == 'postcode' || $order == 'city' || $order == 'country') { $order = 'a.' . $order; } else { $order = 'c.' . $order; } $contacts = $contactsDb->fetchAll($contactsDb->select()->setIntegrityCheck(false)->from(array($schema => 'contact'))->join(array('a' => 'address'), 'c.id = a.contactid', array('street', 'postcode', 'city', 'country'))->joinLeft(array('p' => 'phone'), 'c.id = p.contactid', array('phones' => new Zend_Db_Expr('GROUP_CONCAT(DISTINCT p.phone)')))->joinLeft(array('e' => 'email'), 'c.id = e.contactid', array('emails' => new Zend_Db_Expr('GROUP_CONCAT(DISTINCT e.email)')))->joinLeft(array('i' => 'internet'), 'c.id = i.contactid', array('internets' => new Zend_Db_Expr('GROUP_CONCAT(DISTINCT i.internet)')))->group($schema . '.id')->where($query ? $query : 1)->order($order . ' ' . $params['sort'])->limit($params['limit'])); return $contacts; }