0

1つの列(テスト)で特定のセルの出現回数をカウントし、それらを1つのクエリで配列としてエコーできるようにしようとしています。例

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

各テストのカウントを以下のような配列としてエコーできるようにしたいと思います。

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

複数のクエリ(テストごとに1つのクエリ)で各テストの数を達成できますが、これは非常に非効率的であり、配列として結果を取得することが解決策のようです。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この結果を達成するために実行できるクエリは1つではないと思います。少なくとも、ストアドプロシージャがない場合や、多くのサブクエリを実行している場合はそうです。

于 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 に答える