Mysql
 sql >> Baza danych >  >> RDS >> Mysql

GROUP i COUNT() wieki w CakePHP

Otrzymane wyniki są prawie najlepsze, jakie daje CakePHP.

Aby to uprościć, użyj Set::combine który ponownie indeksuje twoją tablicę.

Musisz zadzwonić $data = Set::combine($data, '{n}.0.age', '{n}.0.COUNT(id)');

Zwróci to tablicę z indeksem wieku i wartością:

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

        )

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

        )
    ...
)

Powodem dodatkowej głębi w tablicy jest to, że Cake używa modelu jako klucza dla tablicy wewnętrznej, jeśli nie używasz pól obliczeniowych, dzięki czemu możesz umieścić wiele modeli jako pola i zostaną one podzielone na różne tablice. Kiedy używasz pól obliczanych, zachowuje tę samą strukturę, ale nie zna modelu, więc musi umieścić go w ogólnej tablicy.

Powiedzmy, że chcesz pogrupować według mężczyzn/kobiet i masz pole User.sex, które nie jest polem obliczeniowym.

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

To by wróciło (coś w stylu):

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
                )

        )
)

Dlatego dla spójności dodatkowa głębia jest zawsze dostępna, nawet jeśli używasz tylko pól obliczeniowych



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zastępowanie unikalnych wartości indeksowanych

  2. MySQL — Entity :wartość kolumny „IsPrimaryKey” w tabeli „TableDetails” to DBNull

  3. Propozycja struktury tabeli mysql?

  4. Jak sprawić, by kategoria pierwszego poziomu była wyświetlana tylko raz?

  5. Jak naprawić bazy danych i tabele MySQL