แนวทางประยุกต์แสดงสรุปรายการแบบตารางรายเดือนจากฐานข้อมูล

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
รายเดือน date

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ รายเดือน date

ดูแล้ว 10,008 ครั้ง


เนื้อหานี้เป็นแนวทางประยุกต์เพิ่มเติมจากบทความตอนที่แล้ว 
 
สร้างฟอร์ม ส่งค่าวันที่เพื่อแสดงข้อมูลรายเดือนอย่างง่าย 
 
รูปแบบสรุปรายการแบบตารางรายเดือนที่เราต้องการจะเป็นดังรูปด้านล่าง
 
 
จากบทความที่แล้ว เราได้รู้จักวิธีการสร้างฟอร์ม ส่งข้อมูลวันที่มาใช้งาน ทำให้เราสามารถ
ประยุกต์เพิ่มเติม โดยการนำวันที่จากฟอร์ม มาใช้ในการสร้างตารางรายเดือนในลักษณะ
แสดงรายการที่ต้องการในด้านซ้าย และจำนวนรายการนั้นๆ แยกตามวันที่ในด้านขวาของตาราง
พร้อมรวมค่าของแต่ละรายการในคอลัมน์ขวาสุดของตาราง ดังรูปด้านบนที่แสดง
 
หลักสำคัญของแนวทางนี้คือ เราจะต้องทำให้ข้อมูลอยู่ในรูปแบบ array ในลักษณะโครงสร้างคล้ายๆ ดังนี้
 
<?php
$data_arr = array(
	"รายการที่ 1"=>array(
		"2017-01-10"=>1,
		"2017-01-13"=>7,
		"2017-01-15"=>8,
		"2017-01-16"=>6,
		"2017-01-18"=>2,
		"2017-01-19"=>3,
		"2017-01-20"=>5,
	),
	"รายการที่ 2"=>array(
		"2017-01-15"=>3,
		"2017-01-16"=>5,
		"2017-01-18"=>5,
		"2017-01-19"=>7,		
	),
	"รายการที่ 3"=>array(
		"2017-01-10"=>2,
		"2017-01-13"=>4,
		"2017-01-15"=>6,
		"2017-01-16"=>8,
		"2017-01-18"=>10,
		"2017-01-19"=>11,
		"2017-01-20"=>13,		
	),
	"รายการที่ 4"=>array(
		"2017-01-13"=>4,
		"2017-01-15"=>6,
		"2017-01-16"=>8,
		"2017-01-18"=>10,		
	),
	"รายการที่ 5"=>array(
		"2017-01-18"=>2,
		"2017-01-19"=>3,
		"2017-01-20"=>5,		
	),
	"รายการที่ 6"=>array(
		"2017-01-13"=>4,
		"2017-01-15"=>6,
		"2017-01-16"=>8,		
	),
);
?>
 
ถ้าในฐานข้อมูลของเรา มีการรวมจำนวนรายการนั้นๆ ในแต่ละวันไว้แล้ว ก็จะสะดวก
ในการนำมาใช้ในการสร้างรูปแบบ array ที่ต้องการ อย่างสมมติเช่น
 
"รายการที่ 6"=>array(
	"2017-01-13"=>4,
	"2017-01-15"=>6,
	"2017-01-16"=>8,		
),
 
รายการที่ 6 มียอดรวม
วันที่ 13, 15 และ 16 / 01 / 2017 เป็น 4, 6 และ 8 ตามลำดับ
 
แต่กรณีที่ข้อมูลของเรายังไม่ได้รวมข้อมูลในแต่ละวัน จุดนี้ เราต้องใช้วิธีบวกค่าเพิ่มให้กับข้อมูลก่อน
แล้วจึงนำมาจัดในรูปแบบของโครงสร้าง array ที่ต้องการ
 
มาดูโครงสร้างข้อมูลในตารางข้อมูลตัวอย่าง อย่างง่าย
 
 

 
 
 
ตัวอย่างส่วนของโค้ดที่ดึงข้อมูลสร้างเป็น array เพื่อใช้งาน กรณีเพิ่มข้อมูลทีละ 1
 
////////////  ตัวอย่าง array ข้อมูล  แบบดึงจากฐานข้อมูล
$sql = "
SELECT * FROM tbl_sale WHERE 
sale_date>='".$start_date_check."' AND  
sale_date<='".$end_date_check."'
ORDER BY sale_item,sale_date
";
echo $sql;
$result = $mysqli->query($sql);
if($result){
	while($row = $result->fetch_assoc()){
		// ถ้ามีตัวแปร array ของข้อมูลของวันที่นั้นแล้ว ให้เพิ่มค่าทีละ 1
		if(isset($data_arr[$row['sale_item']][$row['sale_date']])){
			$data_arr[$row['sale_item']][$row['sale_date']]+=1;
		}else{ // ถ้ายังไม่มีให้เท่ากับ 1
			$data_arr[$row['sale_item']][$row['sale_date']]=1;
		}
	}
}
 
 
ตัวอย่างส่วนของโค้ดที่ดึงมาสร้างเป็น array กรณีใช้ค่าข้อมูลที่มีอยู่แล้ว
 
////////////  ตัวอย่าง array ข้อมูล  แบบดึงจากฐานข้อมูล กรณีใช้ค่าข้อมูลจากฐานข้อมูล
$sql = "
SELECT * FROM tbl_sale WHERE 
sale_date>='".$start_date_check."' AND  
sale_date<='".$end_date_check."'
ORDER BY sale_item,sale_date
";
echo $sql;
$result = $mysqli->query($sql);
if($result){
	while($row = $result->fetch_assoc()){
		// ถ้ามีตัวแปร array ของข้อมูลของวันที่นั้นแล้ว ให้เพิ่มค่าตามค่าฟิลด์ที่ต้องการ
		if(isset($data_arr[$row['sale_item']][$row['sale_date']])){
			$data_arr[$row['sale_item']][$row['sale_date']]+=$row['sale_qty'];
		}else{ // ถ้ายังไม่มีให้เท่ากับค่าฟิลด์ที่ต้องการ
			$data_arr[$row['sale_item']][$row['sale_date']]=$row['sale_qty'];
		}
	}
}
 
 

ไฟล์ dbconnect.php

 
<?php  
$mysqli = new mysqli("localhost", "root","","test");  
/* check connection */  
if ($mysqli->connect_errno) {  
    printf("Connect failed: %s\n", $mysqli->connect_error);  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %s\n", $mysqli->error);  
    exit();  
}  
 
 

ตัวอย่างโค้ดทั้งหมด

<?php
//require_once("dbconnect.php");
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$thai_month_arr=array(
	"0"=>"",
	"1"=>"มกราคม",
	"2"=>"กุมภาพันธ์",
	"3"=>"มีนาคม",
	"4"=>"เมษายน",
	"5"=>"พฤษภาคม",
	"6"=>"มิถุนายน",	
	"7"=>"กรกฎาคม",
	"8"=>"สิงหาคม",
	"9"=>"กันยายน",
	"10"=>"ตุลาคม",
	"11"=>"พฤศจิกายน",
	"12"=>"ธันวาคม"					
);
?>
<br>
<div style="margin:auto;width:1000px;">

  <form method="post" action="">
    เลือกเดือน
    <select name="month_check" id="month_check">
      <?php for($i=1;$i<=12;$i++){ ?>
      <option value="<?=sprintf("%02d",$i)?>" <?=((isset($_POST['month_check']) && $_POST['month_check']==sprintf("%02d",$i)) || (!isset($_POST['month_check']) && date("m")==sprintf("%02d",$i)))?" selected":""?> >
      <?=$thai_month_arr[$i]?>
      </option>
      <?php } ?>
    </select>
    ปี
    <select name="year_check" id="year_check">
	<?php
    $data_year=intval(date("Y",strtotime("-2 year")));
    ?>
      <?php for($i=0;$i<=5;$i++){ ?>
      <option value="<?=$data_year+$i?>" <?=((isset($_POST['year_check']) && $_POST['year_check']==intval($data_year+$i)) || (!isset($_POST['year_check']) && date("Y")==intval($data_year+$i)))?" selected":""?> >
      <?=intval($data_year+$i)+543?>
      </option>
      <?php } ?>
    </select>
    <input type="submit" name="showData" id="showData" value="แสดงข้อมูล" />
  </form>
  
  <br>
  <br>

<?php
 // ถ้าไม่มีการส่งเดือนและปีมา ให้ใช้เดือนและปีในขณะปัจจุบันนั้น เป้นตัวกำหนด
if(!isset($_POST['month_check']) && !isset($_POST['year_check'])){
	$date_data_check=date("Y-m-");// จัดรูปแบบปีและเดือนของวันปัจจุบันในรูปแบบ 0000-00-
	$num_month_day=date("t"); // หาจำนวนวันของเดืนอ
	$use_month_check = $date_data_check;	
	$start_date_check = $date_data_check."01";
	$end_date_check = $date_data_check.$num_month_day;
	echo $use_month_check."<br>";
	echo $start_date_check."<br>"; // ได้ตัวแปรวันที่เริ่มต้นของเดือนไปใช้งาน
	echo $end_date_check."<br>"; // ได้ตัวแปรวันที่สิ้นสุดของเดือนไปใช้งาน
}else{ // ถ้ามีการส่งข้อมูล เดือนและปี มา ให้ใช้เดือนและปี ของค่าที่ส่งมาเป้นตำกำหนด
	$date_data_check=$_POST['year_check']."-".$_POST['month_check']."-"; // จัดรูปแบบปีและเดืนอที่ส่งมาในรูปแบบ 0000-00-
	$num_month_day=date("t",strtotime($_POST['year_check']."-".$_POST['month_check']."-01")); // หาจำนวนวันของเดืนอ
	$use_month_check = $date_data_check;		
	$start_date_check = $date_data_check."01";
	$end_date_check = $date_data_check.$num_month_day;
	echo $use_month_check."<br>";
	echo $start_date_check."<br>"; // ได้ตัวแปรวันที่เริ่มต้นของเดือนไปใช้งาน
	echo $end_date_check."<br>"; // ได้ตัวแปรวันที่สิ้นสุดของเดือนไปใช้งาน
}
?>
<style type="text/css">
.header_row{
	background: #EFE4B0;	
	text-align: center;
	font-size:12px;
}
.header_row .col_50{
	width: 50px;	
}
.header_row .col_100{
	width: 100px;	
}
.header_row .col_200{
	width: 200px;	
}
.data_row{
	background: #EBEAE4;	
	text-align: center;
	font-size:12px;
}
</style>
<?php
$data_arr = array();
////////////  ตัวอย่าง array ข้อมูล 
$data_arr = array(
		"รายการที่ 1"=>array(
			"2017-01-10"=>1,
			"2017-01-13"=>7,
			"2017-01-15"=>8,
			"2017-01-16"=>6,
			"2017-01-18"=>2,
			"2017-01-19"=>3,
			"2017-01-20"=>5,
		),
		"รายการที่ 2"=>array(
			"2017-01-15"=>3,
			"2017-01-16"=>5,
			"2017-01-18"=>5,
			"2017-01-19"=>7,		
		),
		"รายการที่ 3"=>array(
			"2017-01-10"=>2,
			"2017-01-13"=>4,
			"2017-01-15"=>6,
			"2017-01-16"=>8,
			"2017-01-18"=>10,
			"2017-01-19"=>11,
			"2017-01-20"=>13,		
		),
		"รายการที่ 4"=>array(
			"2017-01-13"=>4,
			"2017-01-15"=>6,
			"2017-01-16"=>8,
			"2017-01-18"=>10,		
		),
		"รายการที่ 5"=>array(
			"2017-01-18"=>2,
			"2017-01-19"=>3,
			"2017-01-20"=>5,		
		),
		"รายการที่ 6"=>array(
			"2017-01-13"=>4,
			"2017-01-15"=>6,
			"2017-01-16"=>8,		
		),
);

////////////  ตัวอย่าง array ข้อมูล  แบบดึงจากฐานข้อมูล
/*$sql = "
SELECT * FROM tbl_sale WHERE 
sale_date>='".$start_date_check."' AND  
sale_date<='".$end_date_check."'
ORDER BY sale_item,sale_date
";
echo $sql;
$result = $mysqli->query($sql);
if($result){
	while($row = $result->fetch_assoc()){
		// ถ้ามีตัวแปร array ของข้อมูลของวันที่นั้นแล้ว ให้เพิ่มค่าทีละ 1
		if(isset($data_arr[$row['sale_item']][$row['sale_date']])){
			$data_arr[$row['sale_item']][$row['sale_date']]+=1;
		}else{ // ถ้ายังไม่มีให้เท่ากับ 1
			$data_arr[$row['sale_item']][$row['sale_date']]=1;
		}
	}
}*/
?>
<table border="0" cellpadding="0" cellspacing="2">
  <tr class="header_row">
    <td class="col_50">#</td>
    <td class="col_200">Item</td>
    <?php for($i=1;$i<=$num_month_day;$i++){?>    
    <td class="col_50"><?=$i?></td>
    <?php } ?>    
    <td class="col_100">Total</td>
  </tr>
  
<?php
if($data_arr){
	$total_data = count($data_arr);
		foreach($data_arr as $k_item=>$v_data){
		$row_total = 0;
?>  
  <tr class="data_row">
    <td></td>
    <td><?=$k_item?></td>
    <?php for($i=0;$i<$num_month_day;$i++){?>        
    <td>
	<?php
	$key_date = date("Y-m-d",strtotime($start_date_check." +$i day"));
//	echo $key_date;
	if(isset($v_data["$key_date"])){
		echo $v_data["$key_date"];	
		$row_total += $v_data["$key_date"];	
	}
	?>
	</td>
	<?php } ?>        
    <td><?=$row_total?></td>
  </tr>
<?php  
		}
}
?>  
</table>
</div>
</body>
</html>


 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง






เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ

ยังไม่เป็นสมาชิก

สมาชิกล็อกอิน



( หรือ เข้าใช้งานผ่าน Social Login )




URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ