我想要的只是符合条件的记录数量(还有其他地方需要我从表中获取更多信息,模型/网关有方法可以做到这一点 - 但我想要的只是数字)。
使用Zend Framework 2,我只看到两个选项,我不觉得它们中的任何一个都是一个可口的解决方案:
一个 - 做一个简单的SELECT - 我们每天最多有50,000或更多的记录。
$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;
}
答案 0 :(得分:0)
经过一番思考,并进行类似的查询,但附加信息:
$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))")
));
我认为最好在结果集中返回第一个模型,只是为了保证这些查询的信息结构的一致性。
虽然,我仍然没有100%采用这种方法。