2012-05-31 37 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 –

相關問題