Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

GROUP và COUNT () độ tuổi trong CakePHP

Kết quả bạn nhận được gần như là kết quả tốt nhất mà CakePHP tạo ra.

Để đơn giản hóa việc này, bạn nên sử dụng Đặt ::kết hợp lập chỉ mục lại mảng của bạn.

Bạn sẽ cần gọi $data = Set::combine($data, '{n}.0.age', '{n}.0.COUNT(id)');

Điều này sẽ trả về một mảng có tuổi là chỉ số và được tính là giá trị:

Array
(
    [9] => Array
        (
            [COUNT(id)] => 1

        )

    [10] => Array
        (
            [COUNT(id)] => 1

        )
    ...
)

Lý do cho độ sâu thêm trong mảng là bánh sử dụng mô hình làm khóa cho mảng bên trong nếu bạn không sử dụng các trường được tính toán, do đó bạn có thể đặt nhiều mô hình làm trường và chúng sẽ được chia thành các mảng khác nhau. Khi bạn sử dụng các trường được tính toán, nó vẫn giữ nguyên cấu trúc, nhưng không biết mô hình nên phải đặt nó trong một mảng tổng quát.

Vì vậy, giả sử bạn cũng muốn nhóm theo nam / nữ và bạn có trường User.sex, đây không phải là trường được tính toán.

$data = $this->User->find('all', array(
    'fields' => array(
        "User.sex"
        "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(User.id) AS [count]' // n.b. you have to give aliases normally
    ),
    'group' => 'age', 'User.sex'
));

Điều này sẽ trả về (một cái gì đó giống như):

Array
(
    [0] => Array
        (
            [User] => Array
                (
                    [sex] => Male
                )
            [0] => Array
                (
                    [age] => 4
                    [count] => 1
                )

        )

    [1] => Array
        (
            [User] => Array
                (
                    [sex] => Female
                )
            [0] => Array
                (
                    [age] => 10
                    [count] => 1
                )

        )

    [2] => Array
        (
            [User] => Array
                (
                    [sex] => Male
                )
            [0] => Array
                (
                    [age] => 10
                    [count] => 1
                )

        )
)

Vì vậy, để nhất quán, độ sâu bổ sung luôn ở đó ngay cả khi bạn chỉ sử dụng các trường được tính toán



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng hợp lý các lớp trong các lớp khác trong php?

  2. Lưu trữ hình ảnh trong cơ sở dữ liệu trực tiếp hay dưới dạng dữ liệu base64?

  3. Cách thay đổi định dạng ngày giờ trong MySQL

  4. LỖI 1698 (28000):Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost'

  5. Toán tử logic MySQL