2009-07-04 4 views
1

Je n'arrive pas à obtenir ce fonctionnement, j'ai besoin d'afficher le montant total de la commande par jour sur le graphique.Comment afficher le montant total de la commande par jour dans un graphique

J'ai eu l'Open graphique Flash pour travailler par le code suivant:


<?php 

// Settings for Database Connection 
include_once($root_folder_path . "includes/common.php"); 
include_once("./admin_common.php"); 
include_once("./ofc_chart_library/open-flash-chart.php"); 

$sql = "SELECT * from orders ORDER BY 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 a Y Axis object 
*/ 
$y_axis = new y_axis(); 
$y_axis->set_range(0, 12000, 1000); 

// Add the y-axis object to the chart 
$chart->add_y_axis($y_axis); 

echo $chart->toPrettyString(); 
?> 

Maintenant, le code ci-dessus affiché bien, voici l'instantané:
http://static.zooomr.com/images/7749303_49fd833a44_o.jpg

Qu'est-ce que Je veux est d'afficher la date sur l'axe X, en prenant les valeurs de date de ma base de données MySQL.

Voici comment les dates sont stockées dans ma base de données, qui est un type DateTime:

2008-12-30 00:06:24
2009-02-03 01:57:17
2009-02-03 01:58:27
2009-05-03 01:58:48
2009-06-03 02:00:31
2009-07-03 02:01:47
2009 -07-03 02:02:31
2009-07-04 14:21:18
2009-07-04 14:21:36
2009-07-04 14:22:18
2009-07-04 14:23:29
2009-07-04 14:24:24

J'ai essayé le code suivant pour afficher la date dans l'axe X:


<?php 

include_once 'php-ofc-library/open-flash-chart.php'; 

//Connect to MySQL Database 
$con = mysql_connect("localhost", "root", "password"); 
    if (!$con) die('Could not connect : ' . mysql_error()); 
$db_selected = mysql_select_db("cart",$con); 
    if (!db_selected) die ("Could not find the database: " . mysql_error()); 

$sql = "SELECT * from orders ORDER BY order_placed_date"; 
    if (!$sql) die('Invalid query: ' . mysql_error()); 

$result = mysql_query($sql); 

$amountData = array(); 


while($row = mysql_fetch_array($result)) 
{ 
    $amountData[] = intval($row['order_total']); 
} 

$chart = new open_flash_chart(); 
$chart->set_title(new title('Open Flash Chart Downloads')); 

//Make Bar Chart 
$bar = new bar_filled('#df95c3', '#f34db7'); 
$bar->set_values($amountData); 

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

/* 
* 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;}"); 

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


// Add the bar object to the chart 
$chart->add_element($bar); 


// 
// create an X Axis object 
// 
$x_axis = new x_axis(); 
// grid line and tick every 10 
$x_axis->set_range(
    mktime(0, 0, 0, 1, 1, date('Y')), // <-- min == 1st Jan, this year 
    mktime(0, 0, 0, 1, 31, date('Y')) // <-- max == 31st Jan, this year 
    ); 
// show ticks and grid lines for every day: 
$x_axis->set_steps(86400); 

$labels = new x_axis_labels(); 
// tell the labels to render the number as a date: 
$labels->text('#date:d#'); 
// 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_axis->set_labels($labels); 


$y_axis = new y_axis(); 
$y_axis->set_range(0, 3000, 200); 

// Display the Axis on the Chart 
$chart->set_x_axis($x_axis); 
$chart->add_y_axis($y_axis); 

echo $chart->toPrettyString(); 


?> 

Voici ce que je suis:
http://static.zooomr.com/images/7749325_1c8b37fdf9_o.jpg

le montant est affiché, mais il y a tous dans une ligne sur l'axe 0 x.

Comment puis-je résoudre ce problème, alors procurez-vous les dates de commande dans la base de données, puis affichez-les sur le graphique en fonction de la date à laquelle la commande a été passée.

============================================== ==============

Voici les données JSON pour les totaux de commande et la date à laquelle ils ont été placés.


<?php 

include_once 'php-ofc-library/open-flash-chart.php'; 

//Connect to MySQL Database 
$con = mysql_connect("localhost", "root", "password"); 
    if (!$con) die('Could not connect : ' . mysql_error()); 
$db_selected = mysql_select_db("cart",$con); 
    if (!db_selected) die ("Could not find the database: " . mysql_error()); 

$sql = "SELECT * from orders ORDER BY order_placed_date"; 
    if (!$sql) die('Invalid query: ' . mysql_error()); 

$result = mysql_query($sql); 

$dateData = array(); 
$TotalAmountData = array(); 

while($row = mysql_fetch_array($result)) 
{ 
    $TotalAmountData [] = intval($row['order_total']); 
    $dateData[] = $row['order_placed_date']; 

} 

print '<pre>'; 
print_r($TotalAmountData); 
print_r($dateData); 
print '</pre>';[/code] 

?> 

Cela montre les données JSON suivantes:

Array // This is the Total Order Amount Per Day 
(
    [0] => 2499 
    [1] => 199 
    [2] => 449 
    [3] => 299 
    [4] => 359 
    [5] => 279 
    [6] => 1359 
    [7] => 5099 
    [8] => 2621 
    [9] => 2169 
    [10] => 2249 
    [11] => 5509 
) 
Array // This is the DateTime on which the orders where placed 
(
    [0] => 2008-12-30 00:06:24 
    [1] => 2009-02-03 01:57:17 
    [2] => 2009-02-03 01:58:27 
    [3] => 2009-05-03 01:58:48 
    [4] => 2009-06-03 02:00:31 
    [5] => 2009-07-03 02:01:47 
    [6] => 2009-07-03 02:02:31 
    [7] => 2009-07-04 14:21:18 
    [8] => 2009-07-04 14:21:36 
    [9] => 2009-07-04 14:22:18 
    [10] => 2009-07-04 14:23:29 
    [11] => 2009-07-04 14:24:24 
) 

J'ai essayé de sélectionner la date en supprimant le temps de la date:

SELECT DATE_FORMAT(order_placed_date, '%m-%d-%Y'), order_total FROM orders 

Mais la le code ci-dessus a montré des valeurs vides pour les données JSON

Mise à jour: Quelqu'un peut-il aider?

+0

Je n'arrive pas à afficher les images dans la question, le http continue à être converti en hXXp –

+0

Je pense que c'est parce que vous êtes un nouvel utilisateur. Je les ai réparés pour vous. –

+0

@therefromhere, Merci pour cela. :) –

Répondre

1

Vos valeurs sont-elles vraiment des totaux par jour? On dirait que c'est le total par commande, avec la date de la commande. Le problème avec votre premier graphique est que vous ne divulguez pas vos valeurs aux totaux par jour - Open Flash Chart ne le fera pas pour vous. Vous pouvez le faire dans le cadre de votre requête SQL (par exemple, utilisez DATE() pour convertir les dattes en dates), ou avec PHP en analysant et en reformatant les dates, et en additionnant les valeurs pour le même jour. Notez que selon la façon dont vous gérez l'axe des x, vous devrez peut-être ajouter 0 entrées pour les jours sans aucune commande. Le problème avec votre deuxième graphique est que vous définissez un élément par seconde, mais vos données devraient être par jour. L'important ici est de comprendre the difference between line charts and scatter charts dans Open Flash Chart. Les diagrammes linéaires sont tracés en utilisant un tableau unidimensionnel de points de données, alors que les diagrammes de dispersion sont tracés avec des coordonnées.

+0

@therefromhere, vous avez raison. Le montant total est par commande, mais par jour. Désolé pour ça. Alors quelle valeur dois-je remplacer $ labels-> set_steps (86400) par. Je souhaite afficher l'ordre par jour dans le graphique, pour un mois donné. Quels changements dois-je apporter au code pour le 2ème graphique. –

+1

Une fois que vous avez un tableau de totaux par jour, ne définissez pas la plage et l'étape, mais passez plutôt le tableau de la chaîne de date 31 en tant que vos x-labels. –

Questions connexes