Php 如何解决这个选择查询

Php 如何解决这个选择查询,php,mysql,Php,Mysql,我的MySQL数据库中有两个表。一个为一个特定渠道存储一年中一个月的金额。我有几个频道在另一个表中定义。 以下是包含示例数据的两个表: Table income: ID | Year | Month | amount | channelID example: 1 | 2017 | 05 | 7.13 | 1 2 | 2017 | 05 | 12.03 | 2 3 | 2017 | 06 | 1.56 | 1 4 | 2017 | 06 | 0.

我的MySQL数据库中有两个表。一个为一个特定渠道存储一年中一个月的金额。我有几个频道在另一个表中定义。 以下是包含示例数据的两个表:

Table income:
ID | Year | Month | amount | channelID 
    example:
1  | 2017 | 05    | 7.13   | 1
2  | 2017 | 05    | 12.03  | 2
3  | 2017 | 06    | 1.56   | 1
4  | 2017 | 06    | 0.30   | 2


Table channel: 
ID | title            | url
example:
1  | Affiliate Site 1 | http://url1.tld
2  | Affiliate Site 2 | http://url2.tld
现在,我想生成一个查询,该查询为我提供如下输出:

Expected Output:
Year | Month | amount ch1 | amount ch2
example: 
2017 | 05    | 7.13       | 12.03
2017 | 06    | 1.56       | 0.30
我对编写mysql查询有基本的了解,但我不能解决这个问题。我曾考虑将这些表连接在一起,但这不是解决方案。
如何将一个表中由月份和年份标识的两行(以后的多行)合并到一个输出行中?

一个查询将返回您要求的内容:

SELECT `Year`
, `Month`
, SUM(IF(`channelID` = 1, `amount`, 0)) 'amount ch1'
, SUM(IF(`channelID` = 2, `amount`, 0)) 'amount ch2'
FROM `income`
GROUP BY `Year`, `Month`;
对于任意数量的通道,将返回与上述相同的脚本:

SET @query = (
    SELECT
        CONCAT(
            'SELECT `Year`' ,
            ', `Month`',
            GROUP_CONCAT(
                ', SUM(IF(`channelID` = ', `id`, ', `amount`, 0)) `amount ch', `id`, '` '
                SEPARATOR ''
            ),
            'FROM `income` ',
            'GROUP BY `Year`, `Month`'
        )
    FROM `channel`
);

PREPARE stmt FROM @query;

EXECUTE stmt;

上面是基于通道表中的数据生成查询,并将其存储在
@query
变量中。然后用这个查询准备一个语句并执行它。

尝试使用groupbychannelid和orderbyamount。

我曾考虑将表连接在一起,但这不是解决方案。你试过了吗?你应该试着自己写代码。如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。请务必阅读。您的问题在哪里?如果您喜欢这些链接,您还可以享受: