Mysql
 sql >> база данни >  >> RDS >> Mysql

GROUP и COUNT() възрасти в CakePHP

Резултатите, които получавате, са почти най-добрите, които CakePHP произвежда.

За да опростите това, трябва да използвате Set::combine който преиндексира вашия масив.

Ще трябва да извикате $data = Set::combine($data, '{n}.0.age', '{n}.0.COUNT(id)');

Това ще върне масив с възраст като индекс и ще се брои като стойност:

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

        )

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

        )
    ...
)

Причината за допълнителната дълбочина в масива е, че cake използва модела като ключ за вътрешния масив, ако не използвате изчислени полета, така че можете да поставите множество модели като полета и те ще бъдат разделени на различни масиви. Когато използвате изчислени полета, той запазва същата структура, но не познава модела, така че трябва да го постави в общ масив.

Така че да приемем, че искате да групирате и по мъжки/жени и имате поле User.sex, което не е изчислено поле.

$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'
));

Това ще върне (нещо като):

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
                )

        )
)

По този начин за последователност допълнителната дълбочина винаги е налице, дори ако използвате само изчислени полета



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при мигриране на php artisan:име на възел или име на сървър са предоставени или не са известни

  2. Открийте сортиране на MySQL колона

  3. Значение на MySQL INT

  4. DECIMAL дължина за микровреме (вярно)?

  5. Как да съхранявам поръчки?