Php 没有重复的(分组方式)字段1循环,字段2在水平线上
假设我有一个名为“dp”的表 在mysql视图中:Php 没有重复的(分组方式)字段1循环,字段2在水平线上,php,mysql,loops,group-by,Php,Mysql,Loops,Group By,假设我有一个名为“dp”的表 在mysql视图中: Year | July | August | September | 2008/2009 | 100000 | 200000 | 0 | 2009/2010 | 0 | 150000 | 175000 | 在我的php页面中需要这样的输出: Year | July | August | September | 2008/200
Year | July | August | September |
2008/2009 | 100000 | 200000 | 0 |
2009/2010 | 0 | 150000 | 175000 |
在我的php页面中需要这样的输出:
Year | July | August | September |
2008/2009 | 100000 | John | 200000 | Jane | 0 | - |
2009/2010 | 0 | - | 150000 | Jane | 175000 | John |
我使用以下一些代码:
$query_Recordset1 = "SELECT
year
, SUM(IF(Month='July', Payment, 0)) As 'July'
, SUM(IF(Month='August', Payment, 0)) As 'August'
, SUM(IF(Month='September', Payment, 0)) As 'September'
FROM
dp
WHERE
Payer_ID = 1
GROUP BY
Year";
<?php do { ?>
<tr>
<td><?php echo $row_Recordset1['year']; ?></td>
<td><?php
$monthfilter=$row_Recordset1['month'];
$valuefromfilter=$row_Recordset1['payment'];
if ($monthfilter == 'July')
{
echo $valuefromfilter;
}
else
{
echo "<center>";
echo "<font color=red><b>0</b></font>";
echo "</center><br>";
}
?></td>
<td>script for august</td>
<td>script for september</td>
</tr>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
- =未定义的索引
php页面中的输出有什么解决方案吗?MySQL不支持PIVOT,所以您需要使用解决方案 注意,您需要为每个月添加一个求和规则
SELECT
Year
, SUM(IF(Month='July', Payment, 0)) As 'July'
, SUM(IF(Month='August', Payment, 0)) As 'August'
, SUM(IF(Month='September', Payment, 0)) As 'September'
FROM
dp
WHERE
Payer_ID = 1
GROUP BY
Year
见演示
注意:对于大型表格,您应该在(付款人ID,年份)上使用此索引,以消除对临时表格和排序通行证的需要
编辑检查下面的查询这将使PHP客户端代码非常简单
SELECT
'Year'
, 'July'
, 'August'
, 'September'
UNION ALL
SELECT
Year
, SUM(IF(Month='July', Payment, 0)) As 'July'
, SUM(IF(Month='August', Payment, 0)) As 'August'
, SUM(IF(Month='September', Payment, 0)) As 'September'
FROM
dp
WHERE
Payer_ID = 1
GROUP BY
Year
看
注意:对于一个大表,您应该在(Payer_ID,Year)上使用此索引,以消除对临时表和排序过程的需要是的,这就是我需要的,谢谢,现在如何在我的表php中的循环中输入它?是否有办法将其转换为php变量,以便我可以在我的php视图表中输入它,如果“dp”中有“收件人”列(每个月付款有两个不同的收件人数据),如何将收件人(基于收到付款的收件人)合计(if command?@user2966087 recipient column comment应该是一个新问题,因为PIVOT解决方案将不同,因此这可能会让读者感到困惑..谢谢,您能告诉我如何将其转换为variabel,以便我可以在我的表(html表视图)中输入它吗旁注:您应该使用PDO或MySQLi_*函数,PHP将在将来停止支持mysql_*函数。@RaymondNijland它仅供学习使用,仍然使用旧的Xampp服务器,但我下次会学习。
SELECT
Year
, SUM(IF(Month='July', Payment, 0)) As 'July'
, SUM(IF(Month='August', Payment, 0)) As 'August'
, SUM(IF(Month='September', Payment, 0)) As 'September'
FROM
dp
WHERE
Payer_ID = 1
GROUP BY
Year
SELECT
'Year'
, 'July'
, 'August'
, 'September'
UNION ALL
SELECT
Year
, SUM(IF(Month='July', Payment, 0)) As 'July'
, SUM(IF(Month='August', Payment, 0)) As 'August'
, SUM(IF(Month='September', Payment, 0)) As 'September'
FROM
dp
WHERE
Payer_ID = 1
GROUP BY
Year