2016-08-24 1 views
4

User Tabellenstruktur.CakePHP 2.x finden Abfrage mit DISTINCT und COUNT zusammen auf demselben Feld

+------+-------+ 
| id | data | 
+------+-------+ 
| 1 | a | 
+------+-------+ 
| 1 | b | 
+------+-------+ 
| 2 | c | 
+------+-------+ 

Gewünschtes Ergebnis.

+------+-------+ 
| id | count | 
+------+-------+ 
| 1 | 2 | 
+------+-------+ 
| 2 | 1 | 
+------+-------+ 

Ich versuchte DISTINCT und COUNT in vielerlei Hinsicht, aber immer noch nicht erwünschte Ergebnis.

Was ich versuche

$this->User->find('all',array(
'conditions'=> array(), 
'fields' => array(
'DISTINCT(User.id)', 
'COUNT(DISTINCT User.id) as count' 
) 
) 
); 

Antwort

3

eine Gruppe Versuchen von Klausel

$this->User->find('all', 
    array(
     'fields' => array(
      'User.id', 
      'COUNT(User.id) as count' 
     ), 
     'group' => 'User.id' 
    ) 
); 
+0

danke eine Tonne. Das einzige Problem ist, dass es in einem anderen Array zählt. Ich habe versucht, 'count' in' User.count' zu ändern, aber kein Glück. –

0

Neben Bills answer, count als User Feld bekommen Sie es als ein virtualField

erhalten müssen
$this->User->virtualFields['count'] = 0; 

$this->User->find('all', [ 
    'fields' => array(
     'User.id', 
     'COUNT(User.id) as User__count' 
    ), 
    'group' => 'User.id' 
]); 

Dies wäre Sie r Beispiel Ergebnis:

########## DEBUG ########## 
array(
    (int) 0 => array(
     'User' => array(
      'id' => '1', 
      'count' => '2' 
     ) 
    ), 
    (int) 1 => array(
     'User' => array(
      'id' => '2', 
      'count' => '1' 
     ) 
    ) 
) 
###########################