使用zend_db_select PHP计算一列中的不同单元格

时间:2012-05-20 13:05:31

标签: zend-framework select count distinct

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

**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,非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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列值编制索引,并计算其发生次数。我不相信你可以运行一个查询来实现这个结果,至少没有存储过程或运行很多子查询。

答案 1 :(得分:0)

$sql = $select->from('table', array('test', 'COUNT(test)'))->group('test');
$array = $db->fetchPairs($sql);

答案 2 :(得分:0)

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

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

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

希望有人觉得这有帮助。