2009-07-15 5 views
0

Ich versuche, den Gesamtauftragsbetrag pro Tag im aktuellen Monat anzuzeigen.Kann mir jemand mit dem PHP Chart helfen?

$sql = "SELECT date(order_placed_date), 
       COUNT(order_id), 
       SUM(order_total) AS order_total 
     FROM orders 
     WHERE order_placed_date>=date_sub(current_date, INTERVAL 31 DAY) 
     GROUP BY date(order_placed_date)"; 

if (!$sql) die('Invalid query: ' . mysql_error()); 

$result = mysql_query($sql); 
$data = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $data[] = intval($row['order_total']); 
} 

/* 
* Create a title object and set the text to present month. 
*/ 
$title = new title('Monthly Sales Statistics for '.date("F Y").' (US Dollar)'); 
$title->set_style("{font-size: 18px; 
        font-family: Calibri; 
        color: #808000; 
        text-align: center;}"); 

//Make our Bar Chart 
$bar = new bar_filled('#f99bd6', '#ee0099'); 
$bar->set_values($data); 

//Create a new Chart object 
$chart = new open_flash_chart(); 

// add the title to the chart: 
$chart->set_title($title); 
$chart->set_bg_colour("#FFFFFF"); 

// Display the bar object on the chart 
$chart->add_element($bar); 

// create an X Axis object 
$x = new x_axis(); 

// grid line and tick every 10 
$x->set_range(
    mktime(0, 0, 0, 7, 1, date('Y')), // <-- min == 1st Jan, this year 
    mktime(0, 0, 0, 7, 31, date('Y')) // <-- max == 31st Jan, this year 
    ); 

// show ticks and grid lines for every day: 
$x->set_steps(86400); 

$labels = new x_axis_labels(); 

// tell the labels to render the number as a date: 
$labels->text('#date:j #'); 

// generate labels for every day 
$labels->set_steps(86400); 

// only display every other label (every other day) 
$labels->visible_steps(1); 

// finally attach the label definition to the x axis 
$x->set_labels($labels); 


//Create a Y Axis object 
$y_axis = new y_axis(); 
$y_axis->set_range(1, 15000, 1000); 

//Add the y-axis object to the chart 
$chart->add_y_axis($y_axis); 
$chart->set_x_axis($x); 
echo $chart->toPrettyString(); 
?> 

Dies ist, was ich bin immer:

Kann mir jemand sagen, wo das Problem ist und wie es zu beheben? Hier

ist der print_r($data) Output:

Hier ist die Ausgabe von print_r($data)

Array 
(
    [0] => 7721 
    [1] => 2169 
    [2] => 2249 
    [3] => 5509 
    [4] => 8729 
    [5] => 5899 
    [6] => 1793 
    [7] => 11307 
    [8] => 0 
    [9] => 0 
    [10] => 0 
    [11] => 0 
    [12] => 0 
    [13] => 0 
    [14] => 0 
    [15] => 0 
    [16] => 0 
    [17] => 0 
    [18] => 0 
    [19] => 0 
    [20] => 0 
    [21] => 0 
    [22] => 0 
    [23] => 0 
    [24] => 0 
    [25] => 0 
    [26] => 0 
    [27] => 0 
    [28] => 0 
    [29] => 0 
    [30] => 0 
) 

I die while-Schleife verändert:

for($i=1; $i<32; $i++) 
{ 
    $row = mysql_fetch_array($result);  
    $data[] = intval($row['order_total']); 
} 

Hier ist die aktualisierte Tabelle, wenn die obige Verwendung zur Schleife: alt text http://static.zooomr.com/images/7807811_1b3c7c7274_o.png

+0

Können Sie veröffentlichen, wie die JSON-Ausgabe aussieht? –

+0

do var_dump ($ data) – Greg

+0

Es sieht auf den ersten Blick so aus, als hätten Sie immer noch das gleiche Problem wie in Ihrer ursprünglichen Frage: http://stackoverflow.com/questions/1082526/how-to-display-the-total- Auftragsmenge pro Tag in einem Diagramm –

Antwort

0

Das Problem ist, wie ich in the other thread sagte, dass Sie 31 Elemente von Daten haben (eine pro Tag), aber dieser Code ein x-Achsen-Element für jeweils 2.678.400 Sekunden dieser 31 Tage ist die Schaffung:

// grid line and tick every 10 
$x->set_range(
    mktime(0, 0, 0, 7, 1, date('Y')), // <-- min == 1st 
Jan, this year 
    mktime(0, 0, 0, 7, 31, date('Y')) // <-- max == 31st 
Jan, this year 
    ); 

// show ticks and grid lines for every day: 
$x->set_steps(86400); 

Wenn Sie diese Zeilen loswerden, werden Sie es viel besser arbeiten.

Sie müssen dann eine Reihe von Etiketten für die x-Achse Elemente, und es setzen $x->set_labels_from_array($array_of_labels);

Es gibt eine example of how to do that here verwenden.

Verwandte Themen