1日あたりの合計注文金額をグラフで表示する方法
-
23-08-2019 - |
質問
これがうまくいかないようです。チャートに 1 日あたりの合計注文金額を表示する必要があります。
次のコードにより、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
私が望むのは、MySQL データベースから日付値を取得して、X 軸に日付を表示することです。
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
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
金額が表示されていますが、X 軸 0 にすべてが 1 行に表示されています。
この問題を解決するにはどうすればよいでしょうか。データベースから注文日を取得し、注文日に従ってチャートに表示します。
============================================================
以下は、注文合計と注文日の両方の 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 データの空の値が表示されました
アップデート:誰か助けてくれませんか?
解決
あなたの値は本当に 1 日あたりの合計ですか?注文ごとの合計と注文日が表示されているようです。
最初のグラフの問題は、値を 1 日あたりの合計にバケット化していないことです。Open Flash Chart ではこれが行われません。これを SQL クエリの一部として行うこともできます (例: 日付() 日時を日付に変換する)、または PHP を使用して日付を解析して再フォーマットし、同じ日の値を合計します。X 軸の処理方法によっては、注文のない日には 0 エントリを追加する必要がある場合もあることに注意してください。
2 番目のグラフの問題は、1 秒あたり 1 つの要素を設定しているのに、データは 1 日あたりである必要があることです。ここで重要なことは理解することです 折れ線グラフと散布図の違い 「フラッシュチャートを開く」で。折れ線グラフはデータ ポイントの 1 次元配列を使用してプロットされますが、散布図は座標を使用してプロットされます。