0

私は Cakephp について非常に中程度の理解を持っていますが、この問題を解決できませんでした。

私のウェブサイトでは、人々は使用した特定の物質のログを保存できます. 後でこのデータを (匿名で) 使用して、グラフと統計を Web サイトに表示します。現在、すべてのデータは「レコード」と呼ばれるテーブルに保存されており、コンポーネント/モデルがセットアップされています。

私が注目したいのは、「records」テーブルの「substance」というフィールドだけです。このフィールドには、明らかに、Web サイトのさまざまなメンバーによって同じ値が複数回繰り返されます。

例:

物質 x x y c c c d

ご覧のとおり、x は 2 回、y は 1 回、c は 3 回、d は 1 回繰り返されます。

このテーブルにクエリを実行し、配列をそのまま表示するには、cakePHP が必要です。

['x', '2'],
['y', '1'],
['c', '3'],
['d', '1']

DISTINCT と SUM を使用する必要があると思いますか? しかし、これを行う方法が本当にわかりません。

助けてくれる人に感謝

4

3 に答える 3

0

文書化されているように仮想フィールドを使用しないのはなぜですか? http://book.cakephp.org/2.0/en/models/virtual-fields.html

$this->Record->virtualFields['sum'] = 'COUNT(*)';

// now sum is a field automatically, as well
$grouped = $this->Record->find('all', array(
    'group' => 'Record.substance');

すべてのレコードを取得するには、またはリストとしても取得します (要求に応じて):

$grouped = $this->Record->find('list', array(
    'fields' => array('Record.substance', 'Record.sum'),
    'group' => 'Record.substance');

あなたの配列を返します:

['x', '2'],
['y', '1'],
['c', '3'],
['d', '1']

最もクリーンなアプローチ。もちろん、「物質」や「和」でもご注文いただけます。

于 2013-06-02T14:36:55.960 に答える
0
foreach($possibleSubstance as $substance){
  $conditions = array(
    'Record.substance' => $substance
  );
  $result[$substance] = $this->Record->find('count', array('conditions' => $conditions));
}

$result は配列 ['x'] => #、['y'] => # などになります。

可能性のある物質が不明な場合は、次のようにして最初に取得できます。

$fields = 'DISTINCT Record.substance';
$possibleSubstances = $this->find('all', array('fields' => $fields));

これにより、配列が作成されます。

$possibleSubstances = array(
  (int) 0 => array(
    'Record' => array(
      'substance' => 'x'
    )
  ),
  (int) 1 => array(
    'Record' => array(
      'substance' => 'y'
    )
  ),
);

お役に立てれば。

于 2013-06-02T12:06:11.610 に答える