/** * Get the most searched queries * * @param $from begin time * @param $to end time * * @return associative array */ public function getMostSearchedQueries($from = null, $to = null, $limit = 20) { $subSelect = $this->sql->select(); $subSelect->columns(array('phrase' => 'value')); $subSelect->join(array('noresults' => 'user_stats_fields'), 'user_stats_fields.id = noresults.id', array()); $subSelect->join(array('user_stats' => 'user_stats'), 'user_stats.id = user_stats_fields.id', array('session' => 'session')); if ($from && $to) { $format = "Y-m-d H:i:s"; $from = date($format, $from); $to = date($format, $to); $subSelect->where->greaterThan('user_stats.datestamp', $from); $subSelect->where->lessThan('user_stats.datestamp', $to); } $subSelect->where->equalTo('user_stats_fields.field', 'phrase'); $subSelect->where->equalTo('noresults.field', 'noresults'); $subSelect->where->EqualTo('noresults.value', 'false'); $subSelect->where->notEqualTo('user_stats_fields.value', ''); $subSelect->group(array('phrase', 'session')); $select = new \Zend\Db\Sql\Select(); $select->columns(array('query' => 'phrase', 'count' => new Expression("COUNT(*)"))); $select->from(array('phrase' => $subSelect)); $select->group(array('phrase')); $select->order('count desc'); $select->limit($limit); $statement = $this->sql->prepareStatementForSqlObject($select); $result = $statement->execute(); return $result; }