php - 按 php 中类似的 2 个字段分组并得到总计数结果?

标签 php mysql while-loop

如何在 php 中对两个相似的字段进行分组?

我尝试使用 GROUP BY DATE(bill.date) 和 bill.agent_id 但它对我不起作用

表结构1:http://i.stack.imgur.com/yvBF0.jpg (表名是 bill_agents )
表结构 2:http://i.stack.imgur.com/38tKh.jpg (表名为 bill )

当前结果

+---------+----+----+----+-----+----+
|         |  1 |  2 |  3 |   4 |  5 |
+---------+----+----+----+-----+----+
| Agent 1 | 35 |  0 |  0 |   0 |  0 |
| Agent 2 |  0 | 10 |  0 |   0 |  0 |
| Agent 1 |  0 |  0 | 12 |   0 |  0 |
| Agent 3 |  0 |  0 |  0 | 100 |  0 |
| Agent 6 |  0 |  0 |  0 |   9 |  0 |
| Agent 2 |  0 |  0 |  0 |   9 | 14 |
+---------+----+----+----+-----+----+

1,2,3,4,5 .... 是从 date 开始的天数

但我想得到像下面这样的东西

+---------+----+----+----+-----+----+----+
|         |  1 |  2 |  3 |   4 |  5 |total
+---------+----+----+----+-----+----+----+
| Agent 1 | 35 |  0 | 12 |   0 |  0 |47  |
| Agent 2 |  0 | 10 |  0 |   0 | 14 |28  |
| Agent 3 |  0 |  0 |  0 | 100 |  0 |100 |
| Agent 6 |  0 |  0 |  0 |   9 |  0 | 9  |
+---------+----+----+----+-----+----+----+

下面粘贴了我正在使用的 PHP 代码。

<table width="100%" border="1" cellspacing="4" cellpadding="1">
  <tr>
    <td>&nbsp;</td>
     <?php
for ($i=01; $i<=31; $i++)
  {?>
    <td><?php echo $i; ?></td>
    <?php

  }
?>
    <td>Total</td>
  </tr>
  <?php 

    $query4 = "SELECT bill.agent_id, bill.date, SUM(bill.amount + bill.cheque) AS total, bill_agents.id,bill_agents.name ".
          "FROM bill, bill_agents ".
          "WHERE bill.agent_id = bill_agents.id AND YEAR(date)  = YEAR(CURDATE()) AND MONTH(date) = MONTH(CURDATE()) ". 
          "GROUP BY bill.agent_id , DATE(bill.date)   ".

              // "GROUP BY bill.agent_id , DATE(bill.date)  ".
              "ORDER BY bill.date ASC";

    $result4 = mysql_query($query4) or die('Error, query failed1'); 
    if  (mysql_num_rows($result4)>0){
    mysql_data_seek($result4, 0);   

?>
  <?php $total_1 = 0;  while($row4 = mysql_fetch_array($result4, MYSQL_ASSOC)){?>
  <?php $date =    $row4['date'];

    $var = $date;
    $date = date("d-m-Y", strtotime($var) );
    $date=substr($date, 0, -8); 

    echo $date;

    ?>
  <tr>
    <td><?php echo $row4['name']; ?></td>
    <?php
for ($i=01; $i<=31; $i++)
  {?>
    <td><?php if ($date == $i) echo $row4['total']; ?></td>
    <?php

  }
?>
    <td></td>
  </tr>
  <?php } } ?>
  <tr>
    <td colspan="31"></td>
    <td>Total</td>
    <td></td>
  </tr>
</table>

最佳答案

因为我不知道我是否理解您的问题,这里有一个简短的示例可以为您指明正确的方向:

$query4 = "SELECT bill.agent_id, "
        . "       bill.date, "
        . "       SUM(bill.amount + bill.cheque) AS total, "
        . "       bill_agents.id, "
        . "       bill_agents.name "
        . "FROM bill, bill_agents "
        . "WHERE bill.agent_id = bill_agents.id "
        . "AND YEAR(date) = YEAR(CURDATE()) "
        . "AND MONTH(date) = MONTH(CURDATE()) "
        . "GROUP BY bill.agent_id, DATE(bill.date)   "
        . "ORDER BY bill.date ASC";

$result4 = mysql_query($query4) or die('Error, query failed1');
if (mysql_num_rows($result4) > 0) {
    mysql_data_seek($result4, 0);

    $agents = array();
    while (true == ($row4 = mysql_fetch_assoc($result4))) {
        $agents[$row4['agent_id']][$row4['date']] = $row4;
    } 

    var_dump($agents);
}

查看输出,看看您是否可以进一步使用该 $agents 变量。

关于php - 按 php 中类似的 2 个字段分组并得到总计数结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14232359/

相关文章:

php - 如何区分 socket.io 聊天中的 Symfony 用户角色/组

mysql - 创建一个使用来自两个表的条​​件的查询?

c - 如何在 C 中每行打印 10 个值,其中值按降序排列并且仅使用 while 循环和 if-else 语句?

c - 循环到文件末尾时?

php - 测试时在模型上设置属性

php - 开始一个大型 PHP 项目。 OOP 是必要的还是只是一种偏好?

javascript - Laravel 实现动态侧边栏过滤器

c++ - 我如何使用 while 循环找到 GCD?模运算符如何工作?

javascript - 我如何添加日期格式以从下午 4 点到 9 点 :45am 禁用按钮

Java Rmi数据库连接?