สอบถามวิธีทำไห้ array วนลูปแบบ foreach ให้แสดงข้อมูลในคอลัมน์เดียวกันหน่อยครับ
ตรวจสอบ array ว่ามันมีค่าถูกต้องตามต้องการหรือไม่
print_r($allReportData); ค่าที่ได้จะเอามาทำงานได้หรือไม่
น่าจะกำหนดค่าไม่ถูก
Date :
2017-07-27 20:26:48
By :
Chaidhanan
ดูจากการกำหนดค่าให้กับ $allReportData โดยเอา total มาเป็นคีย์ ก็งงแล้วครับ
น่าจะตัด total ออกไป เอาแค่ bk_day มาเป็นคียแทน เพราะมีการ group by ด้วย bk_day
สำหรับมือใหม่ ไม่ควรเอาภาพมาลงเมื่อสามารถ ใช้ text มาลงได้ เพราะจะทำให้สามารถ copy ได้
เอาภาพมาลงในส่วนของโค๊ดมัน copy code ไม่ได้ก็ไม่อยากช่วยซักเท่าไหร่ เพราะขึ้เกียจพิมพ์เอง มันผิดเพี้ยนได้
Date :
2017-07-27 21:02:36
By :
Chaidhanan
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2017-07-27 21:02:36
รายละเอียดของการตอบ ::
Code (PHP)
//รับค่าตัวแปรที่ส่งมาจากแบบฟอร์ม HTML
$year = isset($_POST['txt_year']) ? mysqli_real_escape_string($con,$_POST['txt_year']) : '';
$month = isset($_POST['txt_month']) ? mysqli_real_escape_string($con,$_POST['txt_month']) : '';
if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');
//เรียกข้อมูลการจองของเดือนที่ต้องการ
$allReportData = array();
$strSQL = "SELECT Total, DAY(`ShippingDate`) AS bk_day, SUM(Total) AS numBook FROM `ecom_order` ";
$strSQL.= "WHERE `ShippingDate` LIKE '$year-$month%' ";
$strSQL.= "GROUP by Total,DAY(`ShippingDate`)";
$qry = mysqli_query($con,$strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysqli_error());
while($row = mysqli_fetch_assoc($qry)){
$allReportData[$row['Total']][$row['bk_day']] = $row['numBook'];
}
echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";
//วันที่สุดท้ายของเดือน
$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate); //จำนวนวันของเดือน
//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือน
for($day=1;$day<=$lastDay;$day++){
echo '<tr>';
echo '<th>' . substr("0".$day, -2) . '</th>';
foreach($allReportData as $empCode=>$empName){
$numBook = isset($allReportData[$empCode][$day]) ? '<div>'.$allReportData[$empCode][$day].'</div>' : 0;
echo "<td class='number'>",$numBook,"</td>";
}
echo '</tr>';
}
echo "</table>";
mysqli_close($con);//ปิดการเชื่อมต่อฐานข้อมูล
ขอบคุณที่แนะนำครับ
ที่ผมเอา Total มาเพราะว่าตอนแรกต้นฉบับเป็นรหัสคนซื้อ และ count(*) มันจะได้จำนวนครั้งที่ซื้อมา
แต่ผมอยากได้ราคารวมเลยนำ Total มาใส่แทนและเปลี่ยนจาก count(*) เป็น sum(Total) ดูครับ
หรือว่าผมควรใช้โค้ดรูปแบบอื่นง่ายกว่า ช่วยแนะนำทีครับ
ขอบคุณครับ
Date :
2017-07-27 21:22:31
By :
sos
Code (PHP)
$strSQL = "
SELECT DAY(`ShippingDate`) AS bk_day, SUM(Total) AS numBook FROM `ecom_order`
WHERE left(`ShippingDate`, 7) = '$year-$month'
GROUP by DAY(`ShippingDate`)
";
...
...
...
while($row=....){
$allReportData[$row['bk_day']]=$row['numBook'];
อันนี้จะเป็น ผลรวมตามวันที่
Date :
2017-07-27 21:48:48
By :
Chaidhanan
WHERE DATE(ShippingDate)='2017-07-01'
เฉพาะวันเดือนปีนั้นๆ
WHERE DAY(ShippingDate)='01'
เฉพาะวันที่
Date :
2017-07-29 09:21:27
By :
Pong Thep
ตอบความคิดเห็นที่ : 8 เขียนโดย : Pong Thep เมื่อวันที่ 2017-07-29 09:21:27
รายละเอียดของการตอบ ::
จาก code ก่อนหน้านี้คือ
Code (PHP)
//รับค่าตัวแปรที่ส่งมาจากแบบฟอร์ม HTML
$year = isset($_POST['txt_year']) ? mysqli_real_escape_string($con,$_POST['txt_year']) : '';
$month = isset($_POST['txt_month']) ? mysqli_real_escape_string($con,$_POST['txt_month']) : '';
if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');
//เรียกข้อมูลการจองของเดือนที่ต้องการ
$allReportData = array();
$strSQL = "
SELECT DAY(`ShippingDate`) AS bk_day, SUM(Total) AS numBook FROM `ecom_order`
WHERE left(`ShippingDate`, 7) = '$year-$month'
GROUP by DAY(`ShippingDate`)";
$qry = mysqli_query($con,$strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysqli_error());
while($row = mysqli_fetch_assoc($qry)){
error_reporting(~E_NOTICE);
$allReportData[$row['Total']][$row['bk_day']]=$row['numBook'];
}
echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";
echo '<tr class="day">';
echo '<td>','วันที่','</td>';
echo '<td width="200">','ยอดรวม','</td>';
echo '<td>','ดูรายละเอียด','</td>';
echo '</tr>';
//วันที่สุดท้ายของเดือน
$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate); //จำนวนวันของเดือน
//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือน
for($day=1;$day<=$lastDay;$day++){
echo '<tr>';
echo '<th>' . substr("0".$day, -2) . '</th>';
foreach($allReportData as $empCode=>$empName){
$numBook = isset($allReportData[$empCode][$day]) ? '<div>'.$allReportData[$empCode][$day].'</div>' : 0;
echo "<td class='number'>",$numBook,"</td>";
}
if ($numBook) {
echo "<td class='icn-see'>";
include('icn_report.php');
echo "</td>";
}else{
echo "<td class='icn-see2'></td>";
}
echo '</tr>';
}
echo "</table>";
mysqli_close($con);//ปิดการเชื่อมต่อฐานข้อมูล
จะได้
แล้วผมอยากทำเพิ่มคือกดดูข้อมูลเพิ่มเติมในวันที่นั้นๆ
แล้วจะดึงข้อมูลเฉพาะวันที่นั้นมาครับ
ถ้า WHERE DATE(ShippingDate)='2017-07-01' มันจะได้เฉพาะของวันที่ 1
Date :
2017-07-29 10:31:47
By :
sos
ที่ tr ของแต่ละ row เพิ่มevent onclick หรือtag <a> เพื่อลิงค์ไปหน้า detail
Date :
2017-07-30 15:08:48
By :
NewbiePHP
Load balance : Server 01