MySQL sorgusu ile yardıma ihtiyacınız

0 Cevap php

MySQL sorgusu ile yardıma ihtiyacım var. İşte benim veritabanının bir parçasıdır:

+---------------+
| users         |
+---------------+
| id            |---
| username      |  |    +-----------------+     +---------------------+
| first_name    |  |    |users_in_projects|     | regular_posts       |
| last_name     |  |    +-----------------+     +---------------------+
| email         |  |    | id              |--   | id                  |
| password      |  |    | project_id      | |   | date                |
| active        |  |----| user_id         | |   | size                |
| created       |       +-----------------+ |---| users_in_project_id |
| modified      |                               +---------------------+
| group_id      |
+---------------+

ve dernekler:

User hasMany UsersInProject
UsersInProject belongsTo User
UsersInProject hasMany RegularPost
RegularPost belongsTo UsersInProject

Ne istediğiniz ile sonuç tablosu:

username ve örneğin 2010 yılı için her ay düzenli mesajların summary boyutu, böyle bir şey:

username 2010-01 2010-02 2010-03 2010-04 2010-05 2010-06 2010-07 2010-08 2010-09 2010-10 2010-11 2010-12
foo        0.75    0.75    1        1      1       0.5    0.75    0.75     0.75    0.75    0.75   0.75
bar         0.5     0.5   0.5      0.5     1       0.75   0.75      1        1       1       1      1
...

ya da dizi gibi:

Result => array (
        [0] => array (
                user.id => 1
                user.username => foo
                RegularPost => array (
                        [0] => array (
                                date => 2010-01
                                size => 0.75
                        )
                        [1] => array (
                                date => 2010-02
                                size => 0.75
                        )
                        ...
                )
        )
        [1] => array (
                user.id => 2
                user.username => bar
                RegularPost => array (
                        [0] => array (
                                date => 2010-01
                                size => 0.5
                        )
                        [1] => array (
                                date => 2010-02
                                size => 0.5
                        )
                        ...
                )
        )
        ...
)

Ben bir kullanıcı için sorgu yazmak, ama her için değil yapabilirsiniz.

$results = $this->User->UsersInProject->RegularPost->find('all', array(
            'recursive' => 0,
            'fields'=> array(
                        'RegularPost.id',
                        'RegularPost.date',
                        'SUM(RegularPost.size) AS size',
                ),
            'conditions' => array(
                'UsersInProject.user_id' => $id,
                'RegularPost.date like' => '2010%',
            ),
            'group' => array('RegularPost.date')
        ));

SELECT
        `RegularPost`.`date`,
        SUM(`RegularPost`.`size`) AS size
FROM
        `regular_posts` AS `RegularPost`
LEFT JOIN
        `users_in_projects` AS `UsersInProject`
ON
        (`RegularPost`.`users_in_project_id` = `UsersInProject`.`id`)
WHERE
        `UsersInProject`.`user_id` = 1 AND `RegularPost`.`date` like '2010%'
GROUP BY
        `RegularPost`.`date`;

Ve sonuç:

+------------+---------+
| date       | size    |
+------------+---------+
| 2010-01-01 | 0.75000 |
| 2010-02-01 | 0.75000 |
| 2010-03-01 | 0.75000 |
| 2010-04-01 | 0.75000 |
| 2010-05-01 | 0.75000 |
| 2010-06-01 | 1.00000 |
| 2010-07-01 | 0.75000 |
| 2010-08-01 | 0.75000 |
| 2010-09-01 | 1.00000 |
| 2010-10-01 | 0.75000 |
| 2010-11-01 | 0.75000 |
| 2010-12-01 | 1.00000 |
+------------+---------+

Lütfen yardım edin.

0 Cevap