2012-05-31 2 views
0

при использовании метода takephp 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] имеют один и тот же сеанс. Вот почему.

+0

Я не помню торт, имеющий прямую функцию, которая делает то, что вы хотите, вы открыты для решения 'foreach'? –

+0

@SiGanteng да, если у нас нет другого решения. Или вы знаете простой запрос mysql, который генерирует набор результатов - может быть легко преобразован в нечто подобное. – sanandrl

+0

Нет ... 'group by' в mysql - это не объединение различных результатов в массивы, поэтому ya. –

ответ

0

Try:

$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())', хотя я думаю, что это miniscule: s –

Смежные вопросы