2012-05-31 38 views
0

当使用cakephp Model-> find()方法时,我想以不同的方式对结果进行分组。cakephp - 如何以不同的方式对结果进行分组?

我的模式是:

`id` int(11) NOT NULL AUTO_INCREMENT, 
    `deviceid` varchar(255) NOT NULL, 
    `user_id` int(11) NOT NULL, 
    `sessionid` varchar(255) NOT NULL, 
    `ip` text NOT NULL, 
    `image_type` varchar(100) NOT NULL DEFAULT 'invalid_image', 
    `filename` text NOT NULL, 
    `analysis_basic` text COMMENT 'output from the image script', 
    `analysis_admin` text, 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `sessionid` (`sessionid`) 

CakePHP中我希望得到一些这样的事:

Array 
(
    [0] => Array 
    (
     [Picture] => Array 
     (
      [sessionid] => somevalue 
     ) 
     [0] => Array 
     (
      [id] => 32 
      [deviceid] => 5124125 
      [userid] => 4541221 
      ...and all other fileds 
     ) 
     [1] => Array 
     (
      [id] => 35 
      [deviceid] => 5124125 
      [userid] => 4541221 
      ...and all other fileds 
     )   
    ) 
    [1] => Array 
    (
     [Picture] => Array 
     (
      [sessionid] => someothervalue 
     ) 
     [0] => Array 
     (
      [id] => 38 
      [deviceid] => 5124454 
      [userid] => 34241 
      ...and all other fileds 
     ) 
     [1] => Array 
     (
      [id] => 35 
      [deviceid] => 5124454 
      [userid] => 34241 
      ...and all other fileds 
     )  

是可能使用CakePHP?还是有更好的方法来实现类似于上述的东西?如果我可以获得这样的结果,我知道[0]元素内的所有记录具有相同的sessionid ..这就是为什么。

+0

我不记得有一个直接的功能,做你想做的蛋糕,你打开'foreach'解决方案吗? –

+0

@SiGanteng是的,如果我们没有其他解决方案。或者你知道生成结果集的普通mysql查询 - 可以很容易地转换成类似的东西。 – sanandrl

+0

不......在mysql中,'group by'不是将不同的结果分组到数组中,所以。 –

回答

0

尝试:

$pictures = $this->Picture->find('all'); 
$grpPicts = array(); 

foreach($pictures as $p) { 
    $sessid = $p['sessionid']; 
    $grpPicts[$sessid]['Picture']['sessionid'] = $sessid; 
    $grpPicts[$sessid][] = $p; 
} 

var_dump(array_values($grpPicts)); 

我知道这是不是最完美的解决方案,但它应该是接近你在找什么。

+0

好,这可能会很慢。但它现在正在做我想要的。感谢 – sanandrl

+0

只是增加了一点性能,你可以使用'array_merge($ grpPicts,array())',尽管我认为它是微不足道的:s –

相关问题