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