PHP循环显示Google图表中的结果

时间:2014-01-29 09:38:14

标签: php sql mysqli google-visualization

我有一个PHP While循环:

$workgroups = mysqli_query($con,"SELECT a.TASK_ID, a.DELETE_WEEK, SUM(a.MON_BILL+a.TUE_BILL+a.WED_BILL+a.THU_BILL+a.FRI_BILL) AS hours, b.ID, b.TITLE, b.GROUP_ID, c.ID, c.NAME, d.VALUE_ID, reverse(reverse(d.VALUE) + 0) AS companyid, e.VALUE_ID, e.UF_CRM_1384938829 AS hourrate, f.ID, f.TITLE as companyname FROM b_report_week a INNER JOIN b_tasks b ON a.TASK_ID = b.ID INNER JOIN b_sonet_group c ON b.GROUP_ID = c.ID INNER JOIN b_utm_tasks_task d ON a.TASK_ID = d.VALUE_ID INNER JOIN b_uts_crm_company e ON reverse(reverse(d.VALUE) + 0) = e.VALUE_ID INNER JOIN b_crm_company f ON reverse(reverse(d.VALUE) + 0) = f.ID WHERE a.DELETE_WEEK = 0 GROUP BY a.TASK_ID");
while($row = mysqli_fetch_array($workgroups))
{
$taskTitle = $row['TITLE'];
$taskTotalHours = $row['hours'];
$companyName = $row['companyname'];
$companyRate = number_format($row['hourrate'] / 7.50,2);
$valueTotal = number_format($row['hours'] * number_format($row['hourrate'] / 7.50,2),2);
}

如果我要在循环内绘制一个表,则会在表中生成正确的结果(显示大约8行,上面标识了5列)。我想要的是在Y轴上显示$ companyname,在x轴上显示$ valueTotal。我比较熟悉谷歌图表,但我尝试了以下(不要高兴):

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Company', 'Sales'],

<I INSERTED THE ABOVE PHP CODE WITH CONNECTION DETAILS HERE WITH A CLOSING ?>>

['<?php echo $companyName; ?>',  <?php echo $valueTotal; ?>],

<?php } ?> <!-- Ends the While Loop -->

['Last Row', 0]

]);

    var options = {
      title: 'Company Performance',
      vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
    };

    var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

<div id="chart_div" style="width: 900px; height: 800px;"></div>

3 个答案:

答案 0 :(得分:0)

使用orientation:'vertical',选项数组中的参数

试试这个

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Company', 'Sales'],
 <?php while ($row = mysql_fetch_array($res)) {?>
 ['<?php echo $row['company']?>',  <?php echo $row['valueTotal']?>],
 <?php } ?>
]);

    var options = {
      title: 'Company Performance',
      orientation : 'vertical',
      vAxis: {title: 'Year',  titleTextStyle: {color: 'red'}}
    };

    var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

答案 1 :(得分:0)

数据应为数字,number_format返回string。如上所述使用round或使用(float)(int)

投射到合适的类型

答案 2 :(得分:0)

请改为尝试:

<?php
    $workgroups = mysqli_query($con,"SELECT a.TASK_ID, a.DELETE_WEEK, SUM(a.MON_BILL+a.TUE_BILL+a.WED_BILL+a.THU_BILL+a.FRI_BILL) AS hours, b.ID, b.TITLE, b.GROUP_ID, c.ID, c.NAME, d.VALUE_ID, reverse(reverse(d.VALUE) + 0) AS companyid, e.VALUE_ID, e.UF_CRM_1384938829 AS hourrate, f.ID, f.TITLE as companyname FROM b_report_week a INNER JOIN b_tasks b ON a.TASK_ID = b.ID INNER JOIN b_sonet_group c ON b.GROUP_ID = c.ID INNER JOIN b_utm_tasks_task d ON a.TASK_ID = d.VALUE_ID INNER JOIN b_uts_crm_company e ON reverse(reverse(d.VALUE) + 0) = e.VALUE_ID INNER JOIN b_crm_company f ON reverse(reverse(d.VALUE) + 0) = f.ID WHERE a.DELETE_WEEK = 0 GROUP BY a.TASK_ID");
    $data = array(array('Company', 'Sales'));
    while($row = mysqli_fetch_array($workgroups)) {
        $taskTitle = $row['TITLE'];
        $taskTotalHours = $row['hours'];
        $companyName = $row['companyname'];
        $companyRate = number_format($row['hourrate'] / 7.50,2);
        $valueTotal = number_format($row['hours'] * number_format($row['hourrate'] / 7.50,2),2);
        $data[] = array($companyName, $valueTotal);
    }
    $data[] = array('Last Row', 0);
?>

在javascript中:

var data = google.visualization.arrayToDataTable(<?php echo json_encode($data, JSON_NUMERIC_CHECK); ?>);
相关问题