如何在图表中显示每天的订单总额
我似乎无法正常工作,我需要在图表上显示每天的订单总额。
我通过以下代码使 Open Flash 图表正常工作:
<?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();
?>
现在上面的代码显示正常,这是快照:
http://static.zooomr.com/images/7749303_49fd833a44_o.jpg
我想要什么是在 X 轴上显示日期,从我的 MySQL 数据库获取日期值。
以下是日期在我的数据库(日期时间类型)中的存储方式:
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
我尝试使用以下代码在 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();
?>
这是我得到的:
http://static.zooomr.com/images/7749325_1c8b37fdf9_o.jpg
金额为已显示,但全部在 0 x 轴处排成一行。
我该如何解决这个问题,所以从数据库中获取订单日期,然后根据下订单的日期将它们显示在图表上。
=================================================== ==========
下面是订单总计及其下达日期的 JSON 数据。
<?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]
?>
这显示了以下 JSON 数据:
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
)
我尝试通过从日期中删除时间来选择日期:
SELECT DATE_FORMAT(order_placed_date, '%m-%d-%Y'), order_total FROM orders
但上面的代码显示 JSON 数据
更新的空值: 有人可以帮忙吗?
I cant seem to get this working, i need to display the Total Order Amount per day on the Chart.
I got the Open Flash chart to work by the following code:
<?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();
?>
Now the above code displayed fine, here is the snapshot:
http://static.zooomr.com/images/7749303_49fd833a44_o.jpg
What i want is to display the Date on the X-Axis, taking the date values from my MySQL Database.
Here are how the dates are stored in my database, which is a DateTime Type:
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
I tried the following code to display the Date in the X-Axis:
<?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();
?>
Here is what i got:
http://static.zooomr.com/images/7749325_1c8b37fdf9_o.jpg
the Amount is being shown, but there are all in one line at the 0 x-axis.
How can I solve this problem, so get the Order Dates from the Database and then display them on the Chart according to the date the order was placed.
============================================================
Below is the JSON data for both Order Totals and the Date they were placed.
<?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]
?>
This shows the following JSON data:
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
)
I tried to select the Date by removing the Time from the Date:
SELECT DATE_FORMAT(order_placed_date, '%m-%d-%Y'), order_total FROM orders
But the above code showed Empty values for JSON Data
Update:
Can anyone help ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的数值真的是每天的总计吗? 看起来是每个订单的总数,以及订单日期。
第一个图表的问题在于,您没有将每天的值存储到总计中 - Open Flash Chart 不会为您执行此操作。 您可以将其作为 SQL 查询的一部分(例如使用 DATE() 将日期时间转换为日期),或者使用 PHP 解析和重新格式化日期,并将同一天的值相加。 请注意,根据您处理 x 轴的方式,您可能还需要在没有任何订单的日子里添加 0 个条目。
第二张图的问题是您每秒设置一个元素,但您的数据应该是每天。 这里重要的是理解折线图和散点图之间的区别Open Flash Chart 中的图表。 折线图使用一维数据点数组绘制,而散点图则使用坐标绘制。
Are your values really totals per day? It looks like it's the total per order, with the date of the order.
The problem with your first graph is that you're not bucketing your values to totals per day - Open Flash Chart won't do this for you. You could do this as part of your SQL query (eg use DATE() to convert the datetimes to dates), or with PHP by parsing and reformatting the dates, and adding together values for the same day. Note that depending on how you handle the x-axis you might also need to add 0 entries for days without any orders.
The problem with your second graph is that you're setting one element per second, but your data should be per day. The important thing here is to understand the difference between line charts and scatter charts in Open Flash Chart. Line charts are plotted using a one-dimensional array of data points, whereas scatter charts are plotted with co-ordinates.