Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,513

HOME > PHP > PHP Forum > สอบถามปัญหาโค้ด ขอคำแนะนำผู้รู้เรื่อง PHP GROUP BY และ SUM ครับผม





 

สอบถามปัญหาโค้ด ขอคำแนะนำผู้รู้เรื่อง PHP GROUP BY และ SUM ครับผม

 



Topic : 133471



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์




รบกวพี่ๆด้วยครับผม

พอผมไม่ใส่ GROUP BY ออกมาครบครับผม ตามรูป 1

รูปที่ 1

พอผม GROUP BY สินค้าแล้ว แสดงข้อมูลไม่ถูกต้องตามรูป 2 ครับผม ขอบคุณครับผม

รูปที่ 2

โค้ดที่ไส่ GROUP BYครับผม


<table class="table table-bordered table-condensed" style="width:100%;">
<thead>
<tr class="bg-success">
<th>วันที่</th>
<th>สินค้า</th>
<th>จำนวนชิ้น</th>
<th>ราคารวม</th>

</tr>
</thead>
<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=[];
$aaa=$_GET[aa];
//echo "$spro";
//echo $_GET[aa];
if ($aaa=="1"){
$q="
SELECT * FROM tb_orders GROUP BY orpackets ORDER BY ordates
";
} else if($spro=="0"){
$q="
SELECT * FROM tb_orders WHERE (ordates BETWEEN '$bdate' AND '$edate') OR orpackets='$spro' ORDER BY ordates
";
} else {
$q="
SELECT * FROM tb_orders WHERE (ordates BETWEEN '$bdate' AND '$edate') AND orpackets='$spro' ORDER BY ordates
";
}


$rs=$mysqli->query($q);
$total=$rs->num_rows;
while($data=$rs->fetch_assoc()){
$show_row_end=0; // เริ่มต้นการแบ่ง กำหนดเป็น 0
// จัดรูปแบบ key วันที่ที่จะใช้เก็บข้อมูล (หากไม่ได้ใช้วันที่ ประยุกต์เป็นอย่างอื่นตามต้องการ)
$dateKey=date("dmY",strtotime($data['ordates']));

/// ส่วนของการกำนหด การเปรียบค่าของรายการ เพื่อแบ่งวันที่เป็นสัดส่วน
$temp_data1=$data['ordates'];
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['ordates'];
// ถ้าไม่ใช้ข้อมูลรายการแรก และ ข้อมูลวันที่รายการก่อนหน้า ไม่เท่ากับรายการที่กำลังแสดง
// นั่นหมายถึงจุดที่เราจะกำหนดว่า เป็นรายการสุดท้ายของวันที่หนึ่งๆ
if($i>1 && $arr_dateCheck[$i-1]!=$data['ordates']){
// กำหนด 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['allqualitys']); // และเพิ่มค่า
}else{
array_push($data_price[$dateKey],$data['allqualitys']); // เพิ่มค่าใน array
}
if(!isset($data_com[$dateKey])){
$data_com[$dateKey]=[];
array_push($data_com[$dateKey],$data['orprices']);
}else{
array_push($data_com[$dateKey],$data['orprices']);
}


?>
<?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['ordates']?>
<?php } ?>
</td>
<td><?=$Q01?>
<?php
// $data['orpackets']
$orpacketss = $data['orpackets'] ;
//echo "$orpacketss";
$strSQL = "SELECT * FROM tb_products WHERE ID = '$orpacketss' ";
$objQuery = mysql_query($strSQL);
while($objResult = mysql_fetch_array($objQuery))
{

echo $objResult["productnames"];

}

?>

</td>
<td><?=$data['allqualitys']?></td>
<td><?=$data['orprices']?></td>
</tr>
<?php if(
// สำหรับแทรก กรณีเป็นรายการสุดท้ายในตาราง
$i==$total){?>
<?php
// รายการสุดท้าย กำหนด key เช็คเป็นค่าที่รูปแบบตรงกัน
$dateKeyCheck=date("dmY",strtotime($data['ordates']));
// รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน 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>



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-04-14 07:47:26 By : sensaiya View : 106 Reply : 4
 

 

No. 1



โพสกระทู้ ( 7,845 )
บทความ ( 1 )



สถานะออฟไลน์


Code (SQL)
select *, sum(xxx) as sumxxx, sum(yyy) as sumyyy 
from .....
where ....
group by zzzz







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-14 08:24:37 By : Chaidhanan
 


 

No. 2



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลองแล้วครับผม ได้เหมือน รูปที่ 2 เหมือนเดิมเลยครับผม

$q="
SELECT *, sum(allqualitys) as sumQ FROM tb_orders GROUP BY orpackets ORDER BY ordates
";

คือผมอยากรวมสินค้าให้เข้ามาด้วยกัน ในแต่ละวัน ครับผม

รูปที่ 3
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-14 09:53:42 By : sensaiya
 

 

No. 3



โพสกระทู้ ( 7,845 )
บทความ ( 1 )



สถานะออฟไลน์


คำสั่ง group by มันเหมือน order by ใส่ได้หลาย field

วิเคราะห์ หน่อย อยากแสดงอะไร แยกตามอะไร บ้าง ก็ใส่ group by ไปให้หมด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-14 11:56:12 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับผม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-20 14:25:18 By : sensaiya
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามปัญหาโค้ด ขอคำแนะนำผู้รู้เรื่อง PHP GROUP BY และ SUM ครับผม
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่