Php 没有重复的(分组方式)字段1循环,字段2在水平线上

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

假设我有一个名为“dp”的表

在mysql视图中:

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