【问题标题】:Merge Array on date to display Google Chart合并日期数组以显示 Google 图表
【发布时间】:2017-06-01 07:22:15
【问题描述】:

我被困在尝试“合并日期数组”以将数据显示到 Google 柱形图中。我想按年/月对问题及其成本进行分组。这是我的数据

array 
  0 => 
    array
      'date' => string '2017-03' 
      'source' => string 'Problem 1'
      'cost' => float 135
  1 => 
    array
      'date' => string '2017-03'
      'source' => string 'Problem 2'
      'cost' => float 385
  2 => 
    array
      'date' => string '2017-04'
      'source' => string 'Problem 3'
      'cost' => float 3500
  3 => 
    array 
      'date' => string '2017-04'
      'source' => string 'Problem 1'
      'cost' => float 4437.5
  4 => 
    array
      'date' => string '2017-04'
      'source' => string 'Problem 2'
      'cost' => float 318

期望的输出是https://jsfiddle.net/9d1fzsaf/1/

如果通过 MySQL groupby 日期和问题来源获取数据,是否应该优化查询?

SELECT DATE_FORMAT(creation_date,'%Y-%m') AS date,
                ( CASE
                         WHEN source_problem = '0' THEN 'Empty'
                         WHEN source_problem = '1' THEN 'Problem 1'
                         WHEN source_problem = '2' THEN 'Problem 2'
                         WHEN source_problem = '3' THEN 'Problem 3'
                        ELSE 'Others'
                END ) AS source,
                            SUM(aprox_cost) AS cost
                        FROM table
                        WHERE source_problem IS NOT NULL
                        GROUP BY DATE_FORMAT(creation_date,'%Y-%m'),
                                 source_problem

任何帮助将不胜感激! 谢谢

【问题讨论】:

  • 在从查询中获取记录时重新组合数据。
  • 谢谢你的回答,这正是我想要做的 $req->execute(); $results = $req->fetchAll(); foreach ($results as $result) { $data[] = array('date'=>$result['date'],'source'=>$result['source'], 'cost'=>(float)$result['cost']); }这里我不知道如何按日期重新分组数据

标签: php arrays charts google-visualization


【解决方案1】:

为了在发布的小提琴中生成图表,
每个source_problem 都需要是一个单独的列

建议将sql中的列分开...

SELECT
  DATE_FORMAT(creation_date,'%Y-%m') AS Month,
  SUM(CASE
    WHEN source_problem = '0'
    THEN aprox_cost
    ELSE 0
  END) AS Empty,
  SUM(CASE
    WHEN source_problem = '1'
    THEN aprox_cost
    ELSE 0
  END) AS Problem1,
  SUM(CASE
    WHEN source_problem = '2'
    THEN aprox_cost
    ELSE 0
  END) AS Problem2,
  SUM(CASE
    WHEN source_problem = '3'
    THEN aprox_cost
    ELSE 0
  END) AS Problem3,
  SUM(CASE
    WHEN source_problem <> '0' AND source_problem <> '1' AND source_problem <> '2' AND source_problem <> '3'
    THEN aprox_cost
    ELSE 0
  END) AS Others
FROM
  table
WHERE
  source_problem IS NOT NULL
GROUP BY
  DATE_FORMAT(creation_date,'%Y-%m')

另外,使用JSON数据时,需要在this format
为了直接创建数据表...

var data = new google.visualization.DataTable(jsonData);

因此,构建结果类似于以下...

$data = array();

$data['cols'] = array(
  array('label' => 'Month', 'type' => 'string')
  array('label' => 'Empty', 'type' => 'number')
  array('label' => 'Problem 1', 'type' => 'number')
  array('label' => 'Problem 2', 'type' => 'number')
  array('label' => 'Problem 3', 'type' => 'number')
  array('label' => 'Others', 'type' => 'number')
);
$data['rows'] = array();

foreach ($results as $result) {
  $row = array(
    array('v' => (string) $result['Month'])
    array('v' => (float) $result['Empty'])
    array('v' => (float) $result['Problem1'])
    array('v' => (float) $result['Problem2'])
    array('v' => (float) $result['Problem3'])
    array('v' => (float) $result['Others'])
  );
  $data['rows'][] = array('c' => $row);
}

echo json_encode($data);

【讨论】:

    【解决方案2】:

    我已在您的 mysql 查询中进行了修改。请使用此代码

     SELECT DATE_FORMAT(creation_date,'%Y-%m') AS date,
                        ( CASE
                                 WHEN source_problem = '0' THEN 'Empty'
                                 WHEN source_problem = '1' THEN 'Problem 1'
                                 WHEN source_problem = '2' THEN 'Problem 2'
                                 WHEN source_problem = '3' THEN 'Problem 3'
                                ELSE 'Others'
                        END ) AS source,
                                    SUM(aprox_cost) AS cost
                                FROM table
                                HAVING source_problem IS NOT NULL
                                GROUP BY date;
    

    【讨论】:

    • 感谢您的帮助,但此查询给出错误#1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column
    • 我已经在脚本中修改了..你能检查一下吗。
    • 仍然是同样的错误,实际上查询正在运行我的结果看起来像date -- source_problem -- cost 2017-3 -- Problem 1 -- 100 我的问题更多是如何让谷歌图表消耗数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2021-05-16
    • 2021-03-10
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多