Orm 使用ZF2数据库查询获取简单计数值的正确方法是什么?
我想要的只是符合条件的记录数(我还需要从表中获取更多信息的其他地方,模型/网关有方法来实现这一点,但我想要的只是数量) 使用Zend Framework 2,我只看到了两个选项,但我觉得这两个选项都不是一个令人满意的解决方案: 一个-做一个简单的选择-我们每天有多达50000或更多的记录Orm 使用ZF2数据库查询获取简单计数值的正确方法是什么?,orm,zend-framework2,zend-db,Orm,Zend Framework2,Zend Db,我想要的只是符合条件的记录数(我还需要从表中获取更多信息的其他地方,模型/网关有方法来实现这一点,但我想要的只是数量) 使用Zend Framework 2,我只看到了两个选项,但我觉得这两个选项都不是一个令人满意的解决方案: 一个-做一个简单的选择-我们每天有多达50000或更多的记录 $select = $this->tableGateway->getSql()->select(); $select->columns(array( "hits" =>
$select = $this->tableGateway->getSql()->select();
$select->columns(array(
"hits" => "id",
));
$select->where->between("timestamp", $start, $end);
$results = $this->tableGateway->selectWith($select);
return $results->count();
两个-执行SELECT COUNT()-然后必须迭代一次结果集并通过模型访问
$select = $this->tableGateway->getSql()->select();
$select->columns(array(
"hits" => new Expression("COUNT(timestamp)"),
));
$select->where->between("timestamp", $start, $end);
$results = $this->tableGateway->selectWith($select);
foreach ($results as $result) {
return $result->hits;
}
经过进一步思考,并执行类似的查询,但包含其他信息:
$select->columns(array(
"searches" => new Expression("COUNT(time)"),
"successes" => new Expression("COUNT(IF(hits > 0, 1, NULL))"),
"failures" => new Expression("COUNT(IF(hits = 0, 1, NULL))"),
"suggestions" => new Expression("COUNT(IF(suggestions > 0, 1, NULL))")
));
我认为最好返回resultset中的第一个模型,这只是为了从这些查询中构造信息的一致性
尽管如此,我仍然不是100%赞成这种方法