我正在尝试计算一列(测试)中特定单元格的出现次数,然后能够在一个查询中将它们作为数组回显。 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,非常感谢任何帮助。
答案 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 );
希望有人觉得这有帮助。