Php 如何解决这个选择查询
我的MySQL数据库中有两个表。一个为一个特定渠道存储一年中一个月的金额。我有几个频道在另一个表中定义。 以下是包含示例数据的两个表: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.
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。我曾考虑将表连接在一起,但这不是解决方案。你试过了吗?你应该试着自己写代码。如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。请务必阅读。您的问题在哪里?如果您喜欢这些链接,您还可以享受: