mysql - 如果给定时间段没有结果,则返回零

时间:2017-12-08 19:37:40

标签: mysql null zero

我有这张桌子:

+----+--------+------------+-----------+------------------+
| id | amount | period     | player_id | payment_category |
+----+--------+------------+-----------+------------------+
|  3 |    100 | 2017-06-01 |         1 |                1 |
| 10 |    100 | 2017-06-01 |         2 |                1 |
|  6 |    100 | 2017-08-01 |         2 |                1 |
|  5 |    100 | 2017-10-01 |         3 |                1 |
|  2 |    100 | 2017-11-01 |         2 |                1 |
|  4 |    100 | 2017-11-01 |         1 |                1 |
|  1 |    100 | 2017-12-01 |         1 |                1 |
|  7 |    100 | 2017-12-01 |         1 |                1 |
|  9 |    100 | 2017-12-01 |         2 |                1 |
| 11 |    200 | 2017-12-01 |         1 |                3 |
+----+--------+------------+-----------+------------------+

目前的结果:

2017-06-01 2
2017-08-01 1
2017-10-01 1
2017-11-01 2
2017-12-01 3

期望的结果:

2017-06-01 2
2017-07-01 0
2017-08-01 1
2017-09-01 0
2017-10-01 1
2017-11-01 2
2017-12-01 3

我该怎么做?我尝试了coalesce和ifnull。没有运气。

我从DQL开始:

    $query = $em->createQuery('
        SELECT COUNT(p.id) as total, p.period
        FROM AppBundle:Payment p
        WHERE p.period >= :fromTime
        AND p.period <= :toTime
        AND p.paymentCategory = 1
        GROUP BY p.period            
    ')

当然,这不会返回缺少月份的结果;)我正在寻找一种方法(学说或本机mysql),它将以某种方式填补缺失的月份。它们不能被硬编码 - 我需要最近x个月的结果。它甚至是可能的,还是我应该用PHP来做?

0 个答案:

没有答案