Estoy intentando agrupar por fecha de nacimiento y contar en función de los resultados, utilizando CakePHP. Aquí está mi consulta.GRUPO y COUNT() edades en CakePHP
$data = $this->User->find('all', array(
'fields' => array(
"DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(User.dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(User.dob, '00-%m-%d')) AS age",
'COUNT(id)'
),
'group' => 'age'
));
Hasta ahora, muy bien. El campo User.dob
es la fecha de nacimiento, es un campo DATETIME
.
cosa es, devuelve algo como esto:
Array
(
[0] => Array
(
[0] => Array
(
[age] => 9
[COUNT(id)] => 1
)
)
[1] => Array
(
[0] => Array
(
[age] => 10
[COUNT(id)] => 1
)
)
[2] => Array
(
[0] => Array
(
[age] => 11
[COUNT(id)] => 1
)
)
[3] => Array
(
[0] => Array
(
[age] => 12
[COUNT(id)] => 8
)
)
[4] => Array
(
[0] => Array
(
[age] => 13
[COUNT(id)] => 1
)
)
Seguramente debe haber una mejor manera.
Y ni siquiera puedo filtrarlo. Este código arroja un error. Columna desconocida 'edad'
$data = $this->User->find('all', array(
'conditions' => array('age >' => 20),
'fields' => array(
"DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(User.dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(User.dob, '00-%m-%d')) AS age",
'COUNT(id)'
),
'group' => 'age'
));
Por cierto, estas son las consultas.
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(User.dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(User.dob, '00-%m-%d')) AS age, COUNT(id) FROM `users` AS `User` WHERE 1 = 1 GROUP BY age
(La rutina de cálculo de la edad fue encontrado en matt's blog.)
Gracias por su respuesta, pero ya tengo lo intenté Sigue arrojando errores de sintaxis en MySQL. – metrobalderas
Sugiero probar la nueva característica de "campos virtuales" en CakePHP 1.3 .. aunque el código es el estado 'beta', todas las pruebas de 1.2 todavía pasan: http://cakephp.lighthouseapp.com/projects/42648/13 -new-features-virtual-fields (instrucciones de actualización: http://cakephp.lighthouseapp.com/projects/42648/13-migration-guide) – deizel
gracias, lo revisaré. – metrobalderas