0

我正在尝试计算一列(测试)中特定单元格的出现次数,然后能够在一个查询中将它们作为数组回显。例如。

**user_id    test**
     1       echo
     1       angio
     1       holter
     1       angio
     1       echo
     1       angio

我希望能够将每个测试的计数作为数组回显,如下所示;

$result['echo'] = 2
$result['holter'] = 1
$result['angio'] = 3

我能够通过多个查询(每个测试一个查询)来实现每个测试的数量,这似乎非常低效,并且将结果作为数组获取似乎是解决方案。使用 zend_bd_select 并非常感谢任何帮助。

4

3 回答 3

1

这使用一个简单的 Zend_Db_Select 查询和一个循环来将结果处理成一个数组,就像你展示的那样。

$groups = array();  // same as $result in your question

$select = $dbTable->select()
                  ->from($dbTable, array('user_id', 'test'))
                  ->where('user_id = ?', $user_id);

$result = $select->query();

while (($row = $result->fetch()) !== false) {
    $test = $row['test'];
    if (!isset($groups[$test])) {
        $groups[$test] = 1;
    } else {
        $groups[$test]++;
    }
}

最后,$groups应该由test列值索引,并计算它发生的次数。我不相信你可以运行一个查询来达到这个结果,至少在没有存储过程或运行许多子查询的情况下是这样。

于 2012-05-20T16:59:31.157 回答
0
$sql = $select->from('table', array('test', 'COUNT(test)'))->group('test');
$array = $db->fetchPairs($sql);
于 2012-05-20T19:57:49.810 回答
0

我意识到这是旧的,但不需要循环结果。

$sql = $dbTable->
    select()->
    from(['u' => 'user'], ['total' => new Zend_Db_Expr('COUNT( DISTINCT u.user_id )')])->
    where( ... );

$resultRow = $this->fetchRow( $sql );

希望有人觉得这很有帮助。

于 2021-07-04T13:26:24.450 回答