เนื้อหาในตอนนี้ จะแสดงแนวทางการดึงข้อมูลจากฐานข้อมูล
มาแสดงในรูปแบบกราฟด้วย highchart
sql ตาราง tbl_sell สำหรับทดสอบ
CREATE TABLE `tbl_sell` ( `id_sell` int(11) NOT NULL auto_increment, `name` varchar(100) NOT NULL, `qty` int(11) NOT NULL, `date_sell` date NOT NULL, PRIMARY KEY (`id_sell`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; -- -- Dumping data for table `tbl_sell` -- INSERT INTO `tbl_sell` VALUES (1, 'สินค้า A', 49, '2015-01-01'); INSERT INTO `tbl_sell` VALUES (2, 'สินค้า A', 71, '2015-02-01'); INSERT INTO `tbl_sell` VALUES (3, 'สินค้า A', 106, '2015-03-01'); INSERT INTO `tbl_sell` VALUES (4, 'สินค้า A', 129, '2015-04-01'); INSERT INTO `tbl_sell` VALUES (5, 'สินค้า A', 144, '2015-05-01'); INSERT INTO `tbl_sell` VALUES (6, 'สินค้า A', 176, '2015-06-01'); INSERT INTO `tbl_sell` VALUES (7, 'สินค้า A', 135, '2015-07-01'); INSERT INTO `tbl_sell` VALUES (8, 'สินค้า A', 148, '2015-08-01'); INSERT INTO `tbl_sell` VALUES (9, 'สินค้า A', 216, '2015-09-01'); INSERT INTO `tbl_sell` VALUES (10, 'สินค้า A', 194, '2015-10-01'); INSERT INTO `tbl_sell` VALUES (11, 'สินค้า A', 95, '2015-11-01'); INSERT INTO `tbl_sell` VALUES (12, 'สินค้า A', 54, '2015-12-01');
ตารางฐานข้อมูลประกอบการอธิบาย
| id_sell | name | qty | date_sell |
| 1 | สินค้า A | 49 | 2015-01-01 |
| 2 | สินค้า A | 71 | 2015-02-01 |
| 3 | สินค้า A | 106 | 2015-03-01 |
| 4 | สินค้า A | 129 | 2015-04-01 |
| 5 | สินค้า A | 144 | 2015-05-01 |
| 6 | สินค้า A | 176 | 2015-06-01 |
| 7 | สินค้า A | 135 | 2015-07-01 |
| 8 | สินค้า A | 148 | 2015-08-01 |
| 9 | สินค้า A | 216 | 2015-09-01 |
| 10 | สินค้า A | 194 | 2015-10-01 |
| 11 | สินค้า A | 95 | 2015-11-01 |
| 12 | สินค้า A | 54 | 2015-12-01 |
1. สร้าง chartoptions.js กำหนดรูปแบบของกราฟ
var chartOptions={
chart: {
type: 'column'
},
title: {
text: 'จำนวนสินค้า A ที่ขายได้แยกรายเดือน'
},
subtitle: {
text: 'ที่มา: แสดงหัวข้อย่อย'
},
xAxis: {
categories: [
'ม.ค.',
'ก.พ.',
'มี.ค.',
'เม.ย.',
'พ.ค.',
'มิ.ย.',
'ก.ค.',
'ส.ค.',
'ก.ย.',
'ต.ค.',
'พ.ย.',
'ธ.ค.'
],
crosshair: true
},
yAxis: {
min: 0,
title: {
text: 'จำนวน (ชิ้น)'
}
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0
}
}
}
2. โครงสร้างไฟล์ทดสอบ highcharts_db.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Highcharts</title>
</head>
<body>
<div style="width:80%;margin:auto;">
<div id="hc_container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="chartoptions.js"></script>
<script type="text/javascript">
$(function () {
// ดึงข้อมูลจากฐานข้อมูลสร้างตัวแปร object series ข้อมูลสำหรับใช้งาน
$.getJSON( "series_db.php",{
year:'2015' // ส่งค่าตัวแปร ไปถ้ามี ในที่นี้ ส่งปีไป เพราะจะดูข้อมูลรายเดือนของปีที่ก่ำหนด
},function(data) {
var dataSeries=data; // รับค่าข้อมูลตัวแปร object series
$('#hc_container').highcharts(
$.extend(chartOptions,{
series:dataSeries
})
);
});
});
</script>
</body>
</html>
3. สร้างไฟล์ดึงข้อมูลจากฐานข้อมูลสร้างรูปแบบ json object สำหรับ highcharts
ไฟล์ series_db.php
<?php
header("Content-type:application/json; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// เชื่อมต่อฐานข้อมูล
$link=mysql_connect("localhost","root","") or die("error".mysql_error());
mysql_select_db("test",$link);
mysql_query("set character set utf8");
$more_q="";
if(isset($_GET['year']) && $_GET['year']!=""){
$more_q.="AND DATE_FORMAT(date_sell,'%Y') ='".$_GET['year']."' ";
}
$q="
SELECT SUM(qty) as sum_qty FROM tbl_sell
WHERE 1 $more_q
GROUP BY DATE_FORMAT(date_sell,'%Y-%m')
ORDER BY date_sell
";
$qr=mysql_query($q);
while($rs=mysql_fetch_array($qr)){
$json_data[]=intval($rs['sum_qty']); // ใช้ intval ฟังชั่นเพื่อกำหนดค่าเป็นตัวเลข
}
// จัดรูปแบบข้อมูลก่อนแปลงเป็น json object
$json_series[]=array(
"name"=>"สินค้า A",
"data"=>$json_data
);
$json= json_encode($json_series); // แปลงข้อมูล array เป็น ข้อความ json object นำไปใช้งาน
// ทำให้ json ไฟล์รองรับ callback function สำหรับ cross domain
if(isset($_GET['callback']) && $_GET['callback']!=""){
echo $_GET['callback']."(".$json.");";
}else{
echo $json;
}
exit;
?>
ตัวอย่างผลลัพธ์ที่ได้