Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp 获取一个不同的值,以及该特定值的计数,并将其显示在数组中_Cakephp - Fatal编程技术网

Cakephp 获取一个不同的值,以及该特定值的计数,并将其显示在数组中

Cakephp 获取一个不同的值,以及该特定值的计数,并将其显示在数组中,cakephp,Cakephp,我对cakephp有一个非常温和的理解,但我还没有解决这个问题 在我的网站上,人们可以储存他们使用过的某些物质的日志。稍后,我将匿名使用这些数据将图表和统计数据显示回网站。现在,我所有的数据都存储在一个名为Records的表中,我已经设置了组件/模型 我只想关注“records”表中名为“substance”的字段。该字段显然具有相同的值,由网站的不同成员重复多次 例如: 物质 x x Y C C C d 如你所见,x重复两次,y,一次,c,三次,d,一次 我需要cakePHP来查询这个表并显示

我对cakephp有一个非常温和的理解,但我还没有解决这个问题

在我的网站上,人们可以储存他们使用过的某些物质的日志。稍后,我将匿名使用这些数据将图表和统计数据显示回网站。现在,我所有的数据都存储在一个名为Records的表中,我已经设置了组件/模型

我只想关注“records”表中名为“substance”的字段。该字段显然具有相同的值,由网站的不同成员重复多次

例如:

物质 x x Y C C C d

如你所见,x重复两次,y,一次,c,三次,d,一次

我需要cakePHP来查询这个表并显示一个数组

['x', '2'],
['y', '1'],
['c', '3'],
['d', '1']
我想我将不得不使用DISTINCT和SUM?但我真的不知道怎么做


感谢所有能够提供帮助的人

您正在寻找的基本SQL查询是

选择物质,计数* 根据记录 按物质分组 这是

我不是cakephp方面的专家,但它可能看起来像

$result = $this->Record
    ->find('all', 
           array('fields' => array('Record.substance', 'COUNT(*)'),
                 'group'  => array('Record.substance')));
$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'
    )
  ),
);

希望这有帮助。

为什么不使用文档中的虚拟字段?

要获取所有记录,甚至是您要求的列表,请执行以下操作:

$grouped = $this->Record->find('list', array(
    'fields' => array('Record.substance', 'Record.sum'),
    'group' => 'Record.substance');
将返回您的阵列:

['x', '2'],
['y', '1'],
['c', '3'],
['d', '1']
最干净的方法。
当然,您也可以按内容或金额排序。

@user2444539您的问题还需要更多帮助吗?是的,我正在尝试解决它,但无法让它发挥作用。查看我在这篇文章中的其他回复!我尝试了你的方法。使用$GROUBLED=内爆“,”时,$GROUBLED;我在输出中得到一个“数组到字符串转换”错误;2,1,4,1,6,1,3,3,7,1$this->Record->virtualFields['sum']=“COUNT*”$分组=$this->Record->find'list',array'fields'=>array'Record.substance',Record.sum',group'=>Record.substance'$分组=内爆“,”,$GROUBLED$此->设置'grouped_set',$grouped;然后我只是在视图中回显“分组集合”。为什么会内爆?只需调试变量。原因是,我需要数据以这种格式显示:“x”、“2”、“y”、“3”等。如果我使用debug$var,它的显示方式是这样的:“x”=>“2”,我之所以需要它以我的格式显示,是因为我需要将它插入谷歌图表
$grouped = $this->Record->find('list', array(
    'fields' => array('Record.substance', 'Record.sum'),
    'group' => 'Record.substance');
['x', '2'],
['y', '1'],
['c', '3'],
['d', '1']