Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 绘制一周中每天的用户事务_Php_Mysql_Plot - Fatal编程技术网

Php 绘制一周中每天的用户事务

Php 绘制一周中每天的用户事务,php,mysql,plot,Php,Mysql,Plot,在我的数据库中有一个事务表。此表包含有关用户资金交易的信息。我的任务是生成两个图表(图),显示每天和每月的交易金额 下图显示了我应该实现的图表示例: 从图中可以看出,当每天没有事务时,总值应为0 在数据库中,我使用以下查询按天对事务进行分组: select DATE_FORMAT(t.transactionDate ,"%b %d") as dayName, sum(t.amount) total from `Transaction` t, t.transactionStatus = 1 an

在我的数据库中有一个事务表。此表包含有关用户资金交易的信息。我的任务是生成两个图表(图),显示每天和每月的交易金额

下图显示了我应该实现的图表示例:

从图中可以看出,当每天没有事务时,总值应为0

在数据库中,我使用以下查询按天对事务进行分组:

select DATE_FORMAT(t.transactionDate ,"%b %d") as dayName, sum(t.amount) total from `Transaction` t, t.transactionStatus = 1 and t.user=17
group by dayName
order by t.transactionDate asc;
当每天都有交易时,这是一种魅力,但当每天都没有任何交易时,这不是很好。假设在DB中,我们有以下事务:

May 1st 20$
May 1st 30$
May 1st 38$
May 2nd 20$
May 4th 100$
May 4th 50$
所以5月3日没有交易

当我对这些事务进行分组时,会得到以下结果:

May 1st 88$
May 2nd 20$
May 4th 150$
我现在想要的是5月3日生成
0$
。是否可以直接在DB中完成,或者我必须使用PHP进行处理

如果我必须用PHP处理它,有什么想法吗

对于绘图,我使用Chart JS库,以下是数据输入示例:

        var areaChartData = {
          labels: ["May 01", "May 02", "May 04"],
          datasets: [
            {
              label: "Transactions",
              fillColor: "rgba(210, 214, 222, 1)",
              strokeColor: "rgba(210, 214, 222, 1)",
              pointColor: "rgba(210, 214, 222, 1)",
              pointStrokeColor: "#c1c7d1",
              pointHighlightFill: "#fff",
              pointHighlightStroke: "rgba(220,220,220,1)",
              data: [88,20,150]
            },

          ]
        };

如您所见,我的想法是直接在图表中使用数据库中的值,其中事务日期是我的X轴,总计是我的Y轴。

一种方法是,首先将所有可能的日期和值作为PHP数组:

$labels = array(
     "May 1st" => 0,
     "May 2nd" => 0,
     "May 3rd" => 0,
     "May 4th" => 0,
     "May 6th" => 0,
     "May 6th" => 0,
     ....

);
然后将数据库中的所有值填充到数组中相应的日期键

...
foreach ( $rows as $row )
{
   $labels[$row['date']] = $row['agg_val'];
   ...

现在,您可以迭代
$labels
数组并输出值。那些不在数据库中的(无事务)被初始化为零。

查看您的查询,它将生成
$result
,如下所示

array (size=3)
  0 => 
    array (size=2)
      'dayName' => string 'May 01' (length=6)
      'total' => int 88
  1 => 
    array (size=2)
      'dayName' => string 'May 02' (length=6)
      'total' => int 20
  2 => 
    array (size=2)
      'dayName' => string 'May 04' (length=6)
      'total' => int 150
此脚本将为chartdata准备数组

$begin = reset($result) ['dayName']; // 1st date in result
$end = end($result) ['dayName']; // last date in result

$begin = new DateTime($begin);
$end = new DateTime($end);
    $end->modify('+1 day');

$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);

function search($input, $day)
{
    foreach($input as $k => $v)
    {
        if ($v['dayName'] == $day) return $k;
    }
    return false;
}

$chartdata = []; // array for chartdata

foreach($period as $dt) // loop for everyday from 1st to last day
{
    $format = $dt->format('M d');
    $flag = search($result, $dt->format('M d'));
    $chartdata[$format] = is_int($flag) ? $result[$flag]['total'] : 0;
}
现在,您的
$chartdata
包含交易表中缺失的日期
2003年5月

现在,将此用作

labels: <?php echo json_encode(array_keys($chartdata))?>,
标签:,

数据:

PHP处理未实现,这就是为什么发布此问题的原因!
data: <?php echo json_encode(array_values($chartdata))?>