使用ZF2数据库查询获取简单计数值的正确方法是什么?

时间:2015-10-30 03:34:15

标签: orm zend-framework2 zend-db

我想要的只是符合条件的记录数量(还有其他地方需要我从表中获取更多信息,模型/网关有方法可以做到这一点 - 但我想要的只是数字)。

使用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;
}

1 个答案:

答案 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%采用这种方法。