เนื้อหาตอนนี้ จะให้แนวทางในการประยุกต์ ดึงข้อมูลจากฐานข้อมูล
ซึ่งโดยทั่วไปชุดข้อมูลในฐานข้อมูล จะเป็นลักษณะเรียกกันเป็นแถวๆ
แต่การใช้งานใน google chart เพื่อสร้างกราฟแนวตั้ง จะมีการนำข้อมูล
มาเปรียบเทียบ ชุดข้อมูล จึงมาลักษณะเป็นแบบ คล้ายๆ matrix หรือ array
หลายมิติ
ดังนั้นการดึงข้อมูลมาแสดงโดยตรงแบบง่าย จะไม่สามารถทำได้ หรือมีขึ้นตอน
ที่ซับซ้อนเกินไป
ตัวอย่างชุดข้อมูลที่ใช้ในการสร้างกราฟแนวตั้ง อย่างง่าย
// สร้างตัวแปร array เก็บค่า ข้อมูล var dataArray1=[ ['ปี', 'ยอดขาย', 'ค่าใช้จ่าย'], ['2004', 1000, 400], ['2005', 1170, 460], ['2006', 660, 1120], ['2007', 1030, 540] ];
ดูรูปแบบการสร้างกราฟอย่างง่ายในตัวอย่างตอนก่อนหน้าที่
แนะนำ สร้างกราฟแนวตั้ง ด้วย google chart อย่างง่าย
https://www.ninenik.com/content.php?arti_id=592 via @ninenik
ทีนี้เรามาลองทดสอบดึงข้อมูลจากฐานข้อมูลดูกันบ้าง สมมติเรามีชุดฐานข้อมูล
การขายสินค้า 3 ชนิด คือ A B และ C โดยมียอดจำนวนที่ขายได้ ของแต่ละรายการ
ในแต่ละเดือนตาม โครงสร้างฐานข้อมูลด้านล่าง
CREATE TABLE `tbl_sale` ( `sale_id` int(11) NOT NULL auto_increment, `name` varchar(50) collate utf8_unicode_ci NOT NULL, `quantity` int(11) NOT NULL, `date` date NOT NULL, PRIMARY KEY (`sale_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=37 ; -- -- Dumping data for table `tbl_sale` -- INSERT INTO `tbl_sale` VALUES (1, 'A', 220, '2014-01-01'); INSERT INTO `tbl_sale` VALUES (2, 'A', 400, '2014-02-01'); INSERT INTO `tbl_sale` VALUES (3, 'A', 250, '2014-03-01'); INSERT INTO `tbl_sale` VALUES (4, 'A', 500, '2014-04-01'); INSERT INTO `tbl_sale` VALUES (5, 'A', 400, '2014-05-01'); INSERT INTO `tbl_sale` VALUES (6, 'A', 800, '2014-06-01'); INSERT INTO `tbl_sale` VALUES (7, 'A', 300, '2014-07-01'); INSERT INTO `tbl_sale` VALUES (8, 'A', 200, '2014-08-01'); INSERT INTO `tbl_sale` VALUES (9, 'A', 200, '2014-09-01'); INSERT INTO `tbl_sale` VALUES (10, 'A', 170, '2014-10-01'); INSERT INTO `tbl_sale` VALUES (11, 'A', 750, '2014-11-01'); INSERT INTO `tbl_sale` VALUES (12, 'A', 550, '2014-12-01'); INSERT INTO `tbl_sale` VALUES (13, 'B', 300, '2014-01-01'); INSERT INTO `tbl_sale` VALUES (14, 'B', 300, '2014-02-01'); INSERT INTO `tbl_sale` VALUES (15, 'B', 600, '2014-03-01'); INSERT INTO `tbl_sale` VALUES (16, 'B', 400, '2014-04-01'); INSERT INTO `tbl_sale` VALUES (17, 'B', 700, '2014-05-01'); INSERT INTO `tbl_sale` VALUES (18, 'B', 800, '2014-06-01'); INSERT INTO `tbl_sale` VALUES (19, 'B', 900, '2014-07-01'); INSERT INTO `tbl_sale` VALUES (20, 'B', 400, '2014-08-01'); INSERT INTO `tbl_sale` VALUES (21, 'B', 300, '2014-09-01'); INSERT INTO `tbl_sale` VALUES (22, 'B', 200, '2014-10-01'); INSERT INTO `tbl_sale` VALUES (23, 'B', 100, '2014-11-01'); INSERT INTO `tbl_sale` VALUES (24, 'B', 190, '2014-12-01'); INSERT INTO `tbl_sale` VALUES (25, 'C', 200, '2014-01-01'); INSERT INTO `tbl_sale` VALUES (26, 'C', 230, '2014-02-01'); INSERT INTO `tbl_sale` VALUES (27, 'C', 100, '2014-03-01'); INSERT INTO `tbl_sale` VALUES (28, 'C', 230, '2014-04-01'); INSERT INTO `tbl_sale` VALUES (29, 'C', 490, '2014-05-01'); INSERT INTO `tbl_sale` VALUES (30, 'C', 220, '2014-06-01'); INSERT INTO `tbl_sale` VALUES (31, 'C', 190, '2014-07-01'); INSERT INTO `tbl_sale` VALUES (32, 'C', 260, '2014-08-01'); INSERT INTO `tbl_sale` VALUES (33, 'C', 530, '2014-09-01'); INSERT INTO `tbl_sale` VALUES (34, 'C', 450, '2014-10-01'); INSERT INTO `tbl_sale` VALUES (35, 'C', 120, '2014-11-01'); INSERT INTO `tbl_sale` VALUES (36, 'C', 320, '2014-12-01');
โดยจากฐานข้อมูลข้างเรา สิ่งที่เราต้องการ มีรุปแบบดังนี้
var dataArray1=[ ['เดือน', 'สินค้า A', 'สินค้า B', 'สินค้า C'], ['ม.ค.', ยอดรวม A,ยอดรวม B,ยอดรวม C], ['ก.พ.', ยอดรวม A,ยอดรวม B,ยอดรวม C], ['มี.ค.', ยอดรวม A,ยอดรวม B,ยอดรวม C], [........... ไปเรื่อยๆ จนครบ 12 เดือน ...... ] ];
ดูตัวอย่างผลลัพธ์ ก่อนเริ่ม
เราจะสร้างไฟล์เพื่อสร้างข้อมูลจากฐานข้อมูลได้ดัง
ไฟล์ gen_data_chart.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); // ส่วนติดต่อกับฐานข้อมูล mysql_connect("localhost","root","") or die("Cannot connect the Server"); mysql_select_db("test") or die("Cannot select database"); mysql_query("set character set utf8"); ?> <?php // ในที่นี้เราจะใช้เป็นเดือน จึงมีการสร้าง array เก็บค่าเดือน $thai_month=array( "ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค." ); // สร้างฟังก์ชั่น หายอดจำนวนที่ขายได้รวม ในแต่ละเดือน ของสินค้าใดๆ // โดยจะสิ่งชื่อสินค้า และปี เข้าไปเพื่อตรวจสอบ และสร้างค่าตัวแปร array // ชุดข้อมูล function getData($val,$year){ $arr_data=array(); // คำสั่ง sql เปลี่ยนไปตามความเหมาะสม ขึ้นกับว่าเป็นข้อมูลประเภทไหน // และต้องการใช้ข้อมูลในลักษณะใด ในที่นี้ เป็นการหายอดรวม ของสินค้า // แต่ละรายการ ในแต่ละเดือน ของปี ที่ส่งค่าตัวแปรมา $q=" SELECT SUM(quantity) as total_quantity FROM tbl_sale WHERE name='".$val."' AND date LIKE '".$year."%' GROUP BY DATE_FORMAT( DATE, '%Y-%m-01' ) "; $qr=mysql_query($q); while($rs=mysql_fetch_array($qr)){ $arr_data[]=$rs['total_quantity']; } return $arr_data; // ส่งค่ากลับชุด array ข้อมูล } // สร้างชุด array ข้อมูลของสินค้า A ปี เป็นตัวแปร $_GET['year'] ที่เราส่งมาในที่นี้คือปี 2014 $col_A=getData('A',$_GET['year']); // สร้างชุด array ข้อมูลของสินค้า A $col_B=getData('B',$_GET['year']); // สร้างชุด array ข้อมูลของสินค้า B $col_C=getData('C',$_GET['year']); // สร้างชุด array ข้อมูลของสินค้า C // กำหนดตัวแปร $i ไว้อ้างอิง key ของชุดข้อมูล array $i=0; $q=" SELECT sale_id FROM tbl_sale GROUP BY DATE_FORMAT( DATE, '%Y-%m-01' ) "; // การ query จะใช้ group by เดียวกัน เพื่อให้ key ของข้อมูล array ตรงและสัมพันธ์กัน $qr=mysql_query($q); while($rs=mysql_fetch_array($qr)){ $json_data[]=array( $thai_month[$i], // สร้างข้อมูลแถวที่สองขึั้นไป คอลัมน์แรก อันนี้คือ เดือนย่อ intval($col_A[$i]), // สร้างข้อมูลแถวที่สองขึั้นไป คอลัมน์ที่สอง ข้อมูลยอดรวมของ สินค้า A intval($col_B[$i]), // สร้างข้อมูลแถวที่สองขึั้นไป คอลัมน์ที่สาม ข้อมูลยอดรวมของ สินค้า B intval($col_C[$i]) // สร้างข้อมูลแถวที่สองขึั้นไป คอลัมน์ที่สี่ ข้อมูลยอดรวมของ สินค้า C ); $i++; // เพื่ม key ของตัวแปร arrray } // ใส่ชุดข้อมูลแถวแรกเข้าไปในตัวแปร array array_unshift($json_data,array("เดือน","สินค้า A","สินค้า B","สินค้า C")); $json= json_encode($json_data); // แปลงข้อมูล array เป็น ข้อความ json object นำไปใช้งาน echo $json; ?>
ต่อไปมาดูการเรียกใช้งานข้อมูล ที่ได้จากไฟล์ gen_data_chart.php
ไฟล์ google_chart_db.php คำอธิบายแสดงในโค้ด
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div style="margin:auto;width:80%;"> <div id="chart_div" style="margin:auto;width: 850px; height: 400px;"></div> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function drawChart() { // ตั้งค่าต่างๆ ของกราฟ ปรับแต่ง https://developers.google.com/chart/interactive/docs/gallery/columnchart var options = { title: "หัวข้อกราฟแนวตั้ง", hAxis: {title: 'ข้อความแนวนอน', titleTextStyle: {color: 'red'}}, vAxis: {title: 'ข้อความแนวตั้ง', titleTextStyle: {color: 'blue'}}, width: 850, height: 400, bar: {groupWidth: "70%"}, legend: { position: 'right', maxLines: 3 }, tooltip: { trigger: 'select' } }; // ดึงข้อมูลจากฐานข้อมูลสร้างตัวแปร array ข้อมูลสำหรับใช้งาน $.getJSON( "gen_data_chart.php",{ year:'2014' // ส่งค่าตัวแปร ไปถ้ามี ในที่นี้ ส่งปีไป เพราะจะดูข้อมูลรายเดือนของปีที่ก่ำหนด },function( data ) { dataArray=data; // รับค่าข้อมูล เก็บไว้ในตัวแปร array // แปลงข้อมูลจาก array สำหรับใช้ในการสร้าง กราฟ var data = google.visualization.arrayToDataTable(dataArray); // สร้างกราฟแนวตั้ง แสดงใน div id = chart_div var chart = new google.visualization.ColumnChart(document.getElementById('chart_div')); chart.draw(data, options); // สร้างกราฟ }); } </script> </body> </html>