แนวทางคำสั่ง sql หาผลรวมในชุดรายการข้อมูลเรียงตามวันที่

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
mysql วันที่ หาผลรวม

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

ดูแล้ว 19,542 ครั้ง


เนื้อหาต่อไปนี้เป็นแนวทาง การหาผลรวมข้อมูลในชุดข้อมูลในรูปแบบต่างๆ 
โดยสามารถนำไปประยุกต์เพิ่มเติมได้

 
ตารางชุดข้อมูลตัวอย่าง

--
-- Table structure for table `tbl_date`
--

CREATE TABLE `tbl_date` (
  `date_id` int(11) NOT NULL,
  `date_day` date NOT NULL,
  `date_val` int(11) NOT NULL,
  `date_val2` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `tbl_date`
--

INSERT INTO `tbl_date` (`date_id`, `date_day`, `date_val`, `date_val2`) VALUES
(1, '2016-06-01', 2, 3),
(2, '2016-06-01', 3, 1),
(3, '2016-06-01', 4, 7),
(4, '2016-06-03', 4, 1),
(5, '2016-06-03', 5, 2),
(6, '2016-06-03', 2, 2),
(7, '2016-06-03', 6, 3);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_date`
--
ALTER TABLE `tbl_date`
  ADD PRIMARY KEY (`date_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_date`
--
ALTER TABLE `tbl_date`
  MODIFY `date_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;


ตารางข้อมูลตัวอย่าง



# date_day date_val date_val2
1 2016-06-01 2 3
2 2016-06-01 3 1
3 2016-06-01 4 7
4 2016-06-03 4 1
5 2016-06-03 5 2
6 2016-06-03 2 2
7 2016-06-03 6 3





1. รูปแบบการรวมแบบ แสดงค่ารวมสะสม 



# Date Day Date Val Date Val2 aggre sum val aggre sum val2
1 2016-06-01 2 3 2 3
2 2016-06-01 3 1 5 4
3 2016-06-01 4 7 9 11
4 2016-06-03 4 1 4 1
5 2016-06-03 5 2 9 3
6 2016-06-03 2 2 11 5
7 2016-06-03 6 3 17 8



รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้

        <table class="table table-bordered">
            <tr>
              <th>#</th>
              <th>Date Day</th>
              <th>Date Val</th>
              <th>Date Val2</th>    
              <th>aggre sum val</th>                       
              <th>aggre sum val2</th>              
            </tr>
<?php  
$i=1;  
$q="  
SELECT *
FROM tbl_date ORDER BY date_day ASC
";  
$result = $mysqli->query($q); // ทำการ query คำสั่ง sql   
$total=$result->num_rows;  // นับจำนวนถวที่แสดง ทั้งหมด  
while($row=$result->fetch_array()){ // วนลูปแสดงข้อมูล  
        $dateKey=date("dmY",strtotime($row['date_day']));   
		$row_span=0;
        if(!isset($aggr_arr[$dateKey])){  
            $aggr_arr[$dateKey]=array();  
			$aggr_arr[$dateKey]['val']=array();
			$aggr_arr[$dateKey]['val2']=array();
        }  
		$aggr_arr[$dateKey]['val'][]=$row['date_val'];
		$aggr_arr[$dateKey]['val2'][]=$row['date_val2'];
?>  
            <tr>  
                <td><?=$i?></td>  
                <td><?=$row['date_day']?></td>
                <td><?=$row['date_val']?></td>
                <td><?=$row['date_val2']?></td>
                <td><?=array_sum($aggr_arr[$dateKey]['val'])?></td>
                <td><?=array_sum($aggr_arr[$dateKey]['val2'])?></td>                                                                        
            </tr>  
<?php $i++; } ?>              
        </table>  

2. รูปแบบการรวมแบบ แสดงค่ารวมตามชุดข้อมูลวันที่ 




# Date Day Date Val Date Val2 Num Sum val Sum val2
1 2016-06-01 2 3 3 9 11
2 2016-06-01 3 1 3 9 11
3 2016-06-01 4 7 3 9 11
4 2016-06-03 4 1 4 17 8
5 2016-06-03 5 2 4 17 8
6 2016-06-03 2 2 4 17 8
7 2016-06-03 6 3 4 17 8



รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้

        <table class="table table-bordered">
            <tr>
              <th>#</th>
              <th>Date Day</th>
              <th>Date Val</th>
              <th>Date Val2</th>
              <th>Num </th>        
              <th>Sum val</th>                       
              <th>Sum val2</th>              
            </tr>
<?php  
$i=1;  
$q="  
SELECT a.*,
(SELECT COUNT(b.date_day) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as num,
(SELECT SUM(b.date_val) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as sumval,
(SELECT SUM(b.date_val2) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as sumval2
FROM tbl_date a ORDER BY a.date_day ASC
";  
$result = $mysqli->query($q); // ทำการ query คำสั่ง sql   
$total=$result->num_rows;  // นับจำนวนถวที่แสดง ทั้งหมด  
while($row=$result->fetch_array()){ // วนลูปแสดงข้อมูล  
?>  
            <tr>  
                <td><?=$i?></td>  
                <td><?=$row['date_day']?></td>
                <td><?=$row['date_val']?></td>
                <td><?=$row['date_val2']?></td>
                <td><?=$row['num']?></td>
                <td><?=$row['sumval']?></td>
                <td><?=$row['sumval2']?></td>                                                                                
            </tr>  
<?php $i++; } ?>              
        </table>  

3. รูปแบบการรวมแบบ แสดงค่ารวมตามชุดข้อมูลวันที่ (แสดงข้อมูลรวมแถวเดียว)




# Date Day Date Val Date Val2 Sum val Num Sum val2
1 2016-06-01 2 3 9 3 11
2 2016-06-01 3 1 3
3 2016-06-01 4 7 3
4 2016-06-03 4 1 17 4 8
5 2016-06-03 5 2 4
6 2016-06-03 2 2 4
7 2016-06-03 6 3 4



รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้

        <table class="table table-bordered">
            <tr>
              <th>#</th>
              <th>Date Day</th>
              <th>Date Val</th>
              <th>Date Val2</th>   
              <th>Sum val</th>     
              <th>Num </th>                                     
              <th>Sum val2</th>              
            </tr>
<?php  
$i=1;  
$q="  
SELECT a.*,
(SELECT COUNT(b.date_day) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as num,
(SELECT SUM(b.date_val) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as sumval,
(SELECT SUM(b.date_val2) FROM tbl_date b WHERE b.date_day=a.date_day GROUP BY b.date_day) as sumval2
FROM tbl_date a ORDER BY a.date_day ASC
";  
$result = $mysqli->query($q); // ทำการ query คำสั่ง sql   
$total=$result->num_rows;  // นับจำนวนถวที่แสดง ทั้งหมด  
$aggr_arr=array();   
while($row=$result->fetch_array()){ // วนลูปแสดงข้อมูล  
        $dateKey=date("dmY",strtotime($row['date_day']));   
		$row_span=0;
        if(!isset($aggr_arr[$dateKey])){  
            $aggr_arr[$dateKey]=array();  
			$row_span=1;
        }  
?>  
            <tr>  
                <td><?=$i?></td>  
                <td><?=$row['date_day']?></td>
                <td><?=$row['date_val']?></td>
                <td><?=$row['date_val2']?></td>
                <?php if($row_span==1){?>
                    <td rowspan="<?=$row['num']?>"><?=$row['sumval']?></td>              
                <?php } ?>
                <td><?=$row['num']?></td>
                <?php if($row_span==1){?>
                    <td rowspan="<?=$row['num']?>"><?=$row['sumval2']?></td>              
                <?php } ?>                                                                          
            </tr>  
<?php $i++; } ?>              
        </table>  


 


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 23-03-2017


เพิ่มเติมเทคนิคการรวมแถว

ทำข้อมูลให้อยู่ในรูปแบบ array 2 มิติ
แล้วเอาตัวอย่างโค้ดนี้ไปรัน ดูเป็นแนวทาง

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Document</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
     integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" 
     crossorigin="anonymous">
 
</head>
<body onclick="window.location.reload()">
 
<br>
<br>
<div class="container">

<?php
$data=array();
$data[1]=array(
	"img1","img2"
);
$data[2]=array(
	"img1","img2","img3","img4"
);
$data[3]=array(
	"img1","img2","img3"
);
?>

<table class="table table-bordered" >
<?php
if(count($data)>0){ // IF1
	foreach($data as $k_data => $v_data){ // FOREACH1
		if(is_array($v_data)){ // IF2
			$num_count=count($v_data);
			$row_i=0;
			if($num_count>0){ // IF3
				for($row_i=0;$row_i<$num_count;$row_i++){// FOR1
?>
<tr>
<?php if($row_i==0){ // IF4 ?>
<td <?=($num_count>1)?'rowspan="'.$num_count.'"':''?> >
	<?=$k_data?>
</td>
<?php } // END IF4 ?>
	<td>
    <?=$data[$k_data][$row_i]?>
    </td>
<!--	<td>
     ถ้าต้องการแสดงมากกว่า 2 คอลัมน์ เพิ่ม td ในส่วนนี้ตามต้องการ
    </td> -->
</tr>

<?php } // END FOR1 ?>
<?php } // END IF3 ?>
<?php } // END IF2 ?>
<?php } // END FOREACH1?>
<?php } // END IF1 ?>
</table>

</div>
 

</body>
</html>


ผลลัพธ์ที่ได้


1 img1
img2
2 img1
img2
img3
img4
3 img1
img2
img3




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











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





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

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


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


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







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