PHP Ionic Angular Phonegap AJAX Javascript CSS MySQL jQuery Forum


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

09 June 2016 By
หาผลรวม วันที่ mysql

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



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

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

--
-- 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








Tags:: วันที่ mysql หาผลรวม






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


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