ช่วยดู code ให้หน่อยครับว่าผมจะเขียน code เพิ่มยังไงให้รายออกมาแบบในรูป เช่น รายวันที่ 2015-07-01 มี 3 รายก็จะได้เรียงตามรูปครับ
ช่วยดู code ให้หน่อยครับว่าผมจะเขียน code เพิ่มยังไงให้รายออกมาแบบในรูป เช่น รายวันที่ 2015-07-01 มี 3 รายก็จะได้เรียงตามรูปครับ
Code (PHP)
<tbody>
<?php
// ส่วนของการกำนหดแสดงการแบ่ง ส่วนของข้อมูลของวันที่ที่ต่างกัน
$temp_data1=null;
$temp_data2=null;
$data_show=1; // 1 แสดง 0 ไม่แสดง
// กำหนดสำหรับอ้างอิง key ของตัวแปร
$i=1;
// ส่วนกำหนดตัวแปร สำหรับเก็บค่าวันที่ และเปรียบเทียบ
$arr_dateCheck=[];
// ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลสะสมในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array
$aggre_price=[];
$aggre_com=[];
// ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array
$data_price=[];
$data_com=[];
$q="
SELECT * FROM tbl_sale ORDER BY sale_date
";
$rs=$mysqli->query($q);
$total=$rs->num_rows;
while($data=$rs->fetch_assoc()){
$show_row_end=0; // เริ่มต้นการแบ่ง กำหนดเป็น 0
// จัดรูปแบบ key วันที่ที่จะใช้เก็บข้อมูล (หากไม่ได้ใช้วันที่ ประยุกต์เป็นอย่างอื่นตามต้องการ)
$dateKey=date("dmY",strtotime($data['sale_date']));
/// ส่วนของการกำนหด การเปรียบค่าของรายการ เพื่อแบ่งวันที่เป็นสัดส่วน
$temp_data1=$data['sale_date'];
if($temp_data2==null){
$temp_data2=$temp_data1;
$data_show=1;
}else{
if($temp_data1==$temp_data2){
$data_show=0;
$temp_data2=$temp_data1;
}else{
$temp_data2=$temp_data1;
$data_show=1;
}
}
// เก็บค่าวันที่ของรายการข้อมูลไว้ในตัวแปร สำหรับเปรียบเทียบ
$arr_dateCheck[$i]=$data['sale_date'];
// ถ้าไม่ใช้ข้อมูลรายการแรก และ ข้อมูลวันที่รายการก่อนหน้า ไม่เท่ากับรายการที่กำลังแสดง
// นั่นหมายถึงจุดที่เราจะกำหนดว่า เป็นรายการสุดท้ายของวันที่หนึ่งๆ
if($i>1 && $arr_dateCheck[$i-1]!=$data['sale_date']){
// กำหนด key วันที่ที่จะเช็ค
$dateKeyCheck=date("dmY",strtotime($arr_dateCheck[$i-1]));
$show_row_end=1; // ให้แสดง หรือแทรกแถวที่ต้องการได้
}
// ส่วนของการเก็บข้อมูลไว้ใน array เพื่อใช้งานผลรวม
if(!isset($data_price[$dateKey])){ // ถ้าไม่มีตัวแปร
$data_price[$dateKey]=[]; // ให้กำหนด
array_push($data_price[$dateKey],$data['sale_price']); // และเพิ่มค่า
}else{
array_push($data_price[$dateKey],$data['sale_price']); // เพิ่มค่าใน array
}
if(!isset($data_com[$dateKey])){
$data_com[$dateKey]=[];
array_push($data_com[$dateKey],$data['sale_com']);
}else{
array_push($data_com[$dateKey],$data['sale_com']);
}
?>
<?php
// แทรกแถวที่ต้องการกรณีปกติ กรณีนี้ รายการสุดท้ายจะไม่ขึ้น เราจะเพิ่มการแทรกไว้ด้านหลัง
// ของข้อมูลแทน
if($show_row_end==1){?>
<?php
// รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม
array_push($aggre_price,array_sum($data_price[$dateKeyCheck]));
array_push($aggre_com,array_sum($data_com[$dateKeyCheck]));
?>
<tr class="bg-warning">
<td class="text-right">รวมรายวัน</td>
<td></td>
<td><?=array_sum($data_price[$dateKeyCheck])?></td>
<td><?=array_sum($data_com[$dateKeyCheck])?></td>
</tr>
<tr class="bg-info">
<td class="text-right">รวมสะสม</td>
<td></td>
<td><?=array_sum($aggre_price)?></td>
<td><?=array_sum($aggre_com)?></td>
</tr>
<?php } ?>
<tr>
<td>
<?php if($data_show==1){?>
<?=$data['sale_date']?>
<?php } ?>
</td>
<td><?=$data['sale_product']?></td>
<td><?=$data['sale_price']?></td>
<td><?=$data['sale_com']?></td>
</tr>
<?php if(
// สำหรับแทรก กรณีเป็นรายการสุดท้ายในตาราง
$i==$total){?>
<?php
// รายการสุดท้าย กำหนด key เช็คเป็นค่าที่รูปแบบตรงกัน
$dateKeyCheck=date("dmY",strtotime($data['sale_date']));
// รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม
array_push($aggre_price,array_sum($data_price[$dateKeyCheck]));
array_push($aggre_com,array_sum($data_com[$dateKeyCheck]));
?>
<tr class="bg-warning">
<td class="text-right">รวมรายวัน</td>
<td></td>
<td><?=array_sum($data_price[$dateKeyCheck])?></td>
<td><?=array_sum($data_com[$dateKeyCheck])?></td>
</tr>
<tr class="bg-info">
<td class="text-right">รวมสะสม</td>
<td></td>
<td><?=array_sum($aggre_price)?></td>
<td><?=array_sum($aggre_com)?></td>
</tr>
<?php } ?>
<?php $i++; } ?>
</tbody>
</table>
</div>
</body> Tag : PHP
ประวัติการแก้ไข 2017-05-30 07:54:39
Date :
2017-05-29 17:26:22
By :
panyaadd
View :
845
Reply :
2
ถ้า sql รอบเดียวไม่จบ คิวรี่ซ้อน
1. group Date , count จำนวนเก็บไว้ และ เก็บค่า id
2. เอาค่า id ของแต่ละ group มาคิวรี่หา product price com ตามลำดับ
3. เอาค่า count มาเทียบกับ loop ที่คิวรี่ข้อ 2 ถ้าครบจำนวน ให้แสดงยอดสะสม
4. วนลำดับไปเรื่อยๆ จนครบ group Date ทั้งหมด
คิดไม่ออกละ นอนดีกว่า
Date :
2017-05-30 00:27:35
By :
apisitp
ได้ละครับ ลองผิดลองถูกได้เลย
Date :
2017-05-30 07:53:56
By :
panyaadd
Load balance : Server 05