【问题标题】:Grouping data from Database table by months in datatable在数据表中按月对数据库表中的数据进行分组
【发布时间】:2020-01-19 18:14:56
【问题描述】:

我目前有一个数据表,其中包含我已完成的工作信息。

 ID  |    date    |  income  |  payment  |  profit
==================================================
  1  | 2019/01/01 |   100    |    75     |   25
  2  | 2019/01/03 |   200    |    150    |   50
  3  | 2019/02/02 |   350    |    200    |   150
  4  | 2019/04/05 |   100    |    75     |   25
  5  | 2019/05/03 |   500    |    300    |   200
  6  | 2019/07/07 |   200    |    160    |   40

我希望使用 highcharts.js 将此数据转换为条形图,但首先我需要以下表的形式按月对所有内容进行分组

Month   |  Income  |  Payment  |  Profit
========================================
January |   300    |   225     |  75
February|   350    |   200     |  50
March   |    0     |    0      |  0
April   |   100    |   75      |  25
May     |   700    |   460     |  240

我不确定如何根据日期查找值。

我希望有这样的东西:

select date ,income, payment, From table1
    SUM( CASE WHEN DATE_FORMAT(date,'%m/%Y') = 01/2019 THEN `income`) as jan_income
    SUM( CASE WHEN DATE_FORMAT(date,'%m/%Y') = 01/2019 THEN `payment`) as jan_payment
    SUM( CASE WHEN DATE_FORMAT(date,'%m/%Y') = 01/2019 THEN `profit`) as jan_profit

并使用table2 填充表格

if (mysqli_num_rows($query) > 0) {
    // output data of each row
    while($result = mysqli_fetch_assoc($query)) {
    echo "<tr>
            <td>January</td>
            <td>".$result['jan_income']."</td>
            <td>".$result['jan_payment']."</td>
            <td>".$result['jan_profit']."</td>
          </tr>
          <tr>
            <td>February</td>
            <td>".$result['feb_income']."</td>
            <td>".$result['feb_payment']."</td>
            <td>".$result['feb_profit']."</td>
          </tr>

如果有人能就实现这一目标的正确方法提出建议,我将不胜感激。

更新...基于 NBK 答案的新 PHP

<tbody>
    <?php
     //Connect to database (same connection details as all tables so know this works)
    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    $sql = "SELECT date, income, payment FROM add_job
            DATE_FORMAT(`date`,'%M %Y') AS MontnameYear, 
            MIN(DATE_FORMAT(`date`,'%M')) AS MonthName, 
            SUM(`income`) AS income,
            SUM(`payment`) AS payment,
            MIN(`date`) AS mdate
            GROUP BY DATE_FORMAT(`date`,'%M %Y')
            ORDER by mdate;";

    $query = mysqli_query($conn, $sql);

    if (mysqli_num_rows($query) > 0) {
        // output data of each row
        while($result = mysqli_fetch_assoc($query)) {
            echo "<tr>
                      <td>".$result['MonthName']."</td>
                      <td>".$result['income']."</td>
                      <td>".$result['payment']."</td>
                      <td>".$result['profit']."</td>
                  </tr>";
            }
        } 
        else { 
            echo "0 results";
        }
    mysqli_close($conn);
?>
</tbody>

【问题讨论】:

    标签: php jquery mysql sql datatables


    【解决方案1】:

    当你使用这个sql状态时会更容易,emt

    Select
      DATE_FORMAT(`date`,'%M %Y') MontnameYear,MIN(DATE_FORMAT(`date`,'%M')) MonthName
      , SUM(`income`) income,SUM(`payment`) payment, SUM(`profit`) profit
      ,MIN(`date`) mdate
    FROM table1
    GROUP BY DATE_FORMAT(`date`,'%M %Y')
    ORDER by mdate;
    

    解释:

    MonthnameYear 需要对选择进行分组以获得正确的收入...

    MonthName 是在表中显示正确的月份名称,因为 你想要它,所以会在 2019 年 1 月

    SUM(..) 很明显,它可以让您得到按月份分组的列的总和,并且 年份

    mdate 我必须正确排序,所以我必须使用实际日期 排序

    DBfiddle example

    这会给你这个结果

    MontnameYear    MonthName   income  payment     profit  mdate
    January 2019    January     300     225         75      2019-01-01 01:00:00
    February 2019   February    350     200         150     2019-02-02 01:00:00
    April 2019      April       100     75          25      2019-04-05 02:00:00
    May 2019        May         500     300         200     2019-05-03 02:00:00
    July 2019       July        200     160         40      2019-07-07 02:00:00
    

    然后在你的 php 代码中做这个,你只有一个表行,它是循环的,它会产生相同的结果。

    while($result = mysqli_fetch_assoc($query)) {
      echo "<tr>
              <td>".$result['MonthName']."</td>
              <td>".$result['income']."</td>
              <td>".$result['payment']."</td>
              <td>".$result['profit']."</td>
            </tr>"
     }
    

    【讨论】:

    • 这正是我所需要的。使用 PHP 填充数据表时,我无法运行查询。它告诉我No data available in table...从这样的查询到可以在 PHP 中用于填充数据表的查询时,通常需要进行任何细微的更改吗?因为我不明白为什么它在这里完美运行,但在我自己的网站上却不行
    • 请从您的 php 文件中至少发布 sql 区域周围的所有内容。 ,以便我可以检查它。您是否在代码中编写了错误处理程序,以便最终我们可以更好地了解是否有问题
    • 在添加到我的问题之后,我注意到需要做一些细微的改变,并且它已经奏效了。谢谢你:-)
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2019-02-09
    • 2014-01-13
    相关资源
    最近更新 更多