แนวทางคำสั่ง sql หาผลรวมในชุดรายการข้อมูลเรียงตามวันที่
เขียนเมื่อ 6 ปีก่อน โดย Ninenik Narkdeeหาผลรวม วันที่ mysql
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ หาผลรวม วันที่ mysql
ไปที่
Copy
แล้วเอาตัวอย่างโค้ดนี้ไปรัน ดูเป็นแนวทาง
ผลลัพธ์ที่ได้
เนื้อหาต่อไปนี้เป็นแนวทาง การหาผลรวมข้อมูลในชุดข้อมูลในรูปแบบต่างๆ
โดยสามารถนำไปประยุกต์เพิ่มเติมได้
ตารางข้อมูลตัวอย่าง
รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้
รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้
รูปแบบโค้ดคำสั่ง php และ sql ที่ใช้
ตารางชุดข้อมูลตัวอย่าง
-- -- 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 สำหรับอ้างอิง
Top
Copy
ขอบคุณทุกการสนับสนุน
![]()