Tôi đang cố gắng nhóm theo ngày sinh và được tính dựa trên kết quả, sử dụng CakePHP. Đây là truy vấn của tôi.GROUP và COUNT() tuổi trong 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'
));
Cho đến giờ, rất tốt. Trường User.dob
là ngày sinh, đó là trường DATETIME
.
Thing là, nó sẽ trả về một cái gì đó như thế này:
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
)
)
Chắc chắn phải có một cách tốt hơn.
Và tôi thậm chí không thể lọc bộ lọc. Mã này ném lỗi. Cột không xác định 'tuổi'
$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'
));
Nhân đây, đây là các truy vấn.
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
(Những thói quen tính toán tuổi đã được tìm thấy trong matt's blog.)
Cám ơn câu trả lời của bạn, nhưng tôi có đã đã thử điều đó. Nó tiếp tục ném lỗi cú pháp trong MySQL. – metrobalderas
Tôi khuyên bạn nên thử tính năng "trường ảo" mới trong CakePHP 1.3 .. mặc dù mã là trạng thái 'beta', tất cả các thử nghiệm từ 1.2 vẫn vượt qua: http://cakephp.lighthouseapp.com/projects/42648/13 -new-features-virtual-fields (hướng dẫn nâng cấp: http://cakephp.lighthouseapp.com/projects/42648/13-migration-guide) – deizel
cảm ơn, tôi sẽ kiểm tra nó. – metrobalderas