คือผมทำออกมาแล้วมันลูปตามเดืิอนแล้วแต่ ดันติดวันของอีกเดือนมาด้วย ผมพลาดตรงไหนพี่ๆช่วยดูให้หน่อยครับผม
พี่ ๆ ช่วยดูทีครับผม บางทีก็งงๆ ครับคิดไม่ออกไม่รู้จะทำยังไงทั้งๆที่นังอ่านมาก็เยอะ // สงสัยผมจะไม่รู้เรื่องเอง ช่วยแนะนำทีครับ
Code (PHP)
<?php while (strtotime($stdate) <= strtotime($endate)) {
$where=' where orders_date>="'.$stdate.'" ';
$query = sprintf('select * from orders %s ',$where);
$result = mysqli_query($con,$query);
if (mysqli_num_rows($result)>0) {
?>
<table class="table table-bordered">
<p>วันที่ : <?php echo thaidatem($stdate); ?></p>
<thead>
<tr>
<th>#</th>
<th>ชื่อลูกค้า</th>
<th>การรับสินค้า</th>
<th>รวมเป็นเงิน</th>
<th>สถานะ</th>
</tr>
</thead>
<?php
$where=' where orders_date>="'.$stdate.'" ';
$query = sprintf('select * from orders %s ',$where);
$result = mysqli_query($con,$query);
if (mysqli_num_rows($result)>0) {
for ($i=1;$i<=mysqli_num_rows($result);$i++) {
$rs = mysqli_fetch_array($result);
$query2 = 'select * from orders_detail where orders_id='.$rs['orders_id'];
$result2 = mysqli_query($con,$query2);
for ($j=1;$j<=mysqli_num_rows($result2);$j++)
{ $rs2 = mysqli_fetch_array($result2);
$query3 = 'select * from product where pro_no="'.$rs2['pro_no'].'"';
$result3 = mysqli_query($con,$query3);
$rs3 = mysqli_fetch_array($result3);
$sum='';
$sum +=$rs2['pro_amount'] * $rs3['pro_price'];
}
$query4 = sprintf('select * from branch where br_id=%s',$rs['branch_id']);
$result4 = mysqli_query($con,$query4);
$rs4 = mysqli_fetch_array($result4);
?>
<tbody>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo $rs['cus_name']; ?></td>
<td><?php echo 'รับที่ '.$rs4['br_name'].'<br> วันที่ : '.thaidate($rs['rec_date']).' - '.$rs['rec_time']; ?></td>
<td><?php echo number_format($sum,2); ?></td>
<td>
<?php if ($rs['orders_status']==1) {echo 'ยังไม่ชำระเงิน';}
else if ($rs['orders_status']==2) { echo 'รอการตรวจสอบ'; }
else if ($rs['orders_status']==3) { echo 'รอจัดส่งสินค้า'; }
else {echo 'รับสินค้าเรียบร้อย';} ?>
</td>
</tr>
<?php }} ?>
</tbody>
<tr>
<td colspan="5"><h5 class="pull-right">จำนวน <?php echo $i-1; ?> รายการ <br><br>รวม <?php echo number_format($val,2); ?> บาท</h5></td>
</tr>
<?php } $stdate = date ("Y-m-d", strtotime("+1 month", strtotime($stdate)));}?>
</table>
Tag : PHP
ประวัติการแก้ไข 2016-09-28 15:47:59 2016-09-28 15:48:02 2016-09-28 16:06:22 2016-09-28 16:06:54 2016-09-28 16:08:13 2016-09-28 16:09:18 2016-09-28 16:10:00
Date :
2016-09-28 15:15:40
By :
DisconnectOver
View :
909
Reply :
20
ดันติดวันของอีกเดือนมาด้วย มันคืออะไร ตรงไหนในรูปที่เกินมาครับ ที่ไม่ต้องการครับ
#เอา code ใส่ tag PHP ครับจะได้อ่านง่าย
Date :
2016-09-28 15:58:42
By :
apisitp
ตารางเดือน 9 ครับ ช่องสุดท้ายติดเดือน 10 มาด้วยครับ
Date :
2016-09-28 16:05:52
By :
DisconnectOver
ก็ในรูปคุณขึ้น วันที่ 09/2016 เราก็งงตามสิครับ....
สรุป ในฟิลด์ที่เก็บข้อมูล เปลี่ยนรูปแบบเป็น date ตามหลักสากลครับ yyyy-mm-dd อาทิ 2016-10-31 เวลาทำอะไรจะง่าย...
ไม่งั้นก็ต้องมาแยก วัน เดือน ปี เพื่อเทียบ ใช้ substr ก็ได้
Date :
2016-09-28 22:00:27
By :
apisitp
บันทัด19
$where=' where orders_date>= "'.$stdate.'" ';
สีแดงมากกว่าหรือเท่ากับ ถ้ามันจะมีหลายเดือนก็ไม่แปลก
กำหนดวันสิ้นสุดด้วยสิครับ
Date :
2016-09-29 02:10:11
By :
Chaidhanan
ในรูป วันที่ 9/2016 ที่จริงเป็นเดือน 9/2016 ครับ ลืมเปลี่ยน ขอโทษทีครับผม
$where=' where orders_date>="'.$stdate.'" ';
ควรเปลี่ยนเป็นแบบไหนหรอครับช่วยทีครับผม
Date :
2016-09-29 09:01:16
By :
DisconnectOver
$where=' where orders_date>="'.$stdate.'" ';
ถ้าต้องการข้อมูลทั้งหมดของเดือนนั้น ผมทำประมาณแบบนี้อ่ะ
$stdate = "YYYY-mm";
$where=' where DATE_FORMAT(orders_date,'%Y-%m')="'.$stdate.'" ';
Date :
2016-09-29 09:12:57
By :
thesin18598
ทำไมข้อมูลผมไม่ออกมา T_T งงสุดๆครับ ที่ขึ้นตารางเพราะมีข้อมูลอยู่ครับ
$where=' where DATE_FORMAT(orders_date,%Y-%m)="'.$stdate.'" ';
ประวัติการแก้ไข 2016-09-29 11:01:08
Date :
2016-09-29 11:00:34
By :
DisconnectOver
echo $where มาดูหน่อยครับ
Date :
2016-09-29 11:07:05
By :
Chaidhanan
นี้ครับผม
where DATE_FORMAT(orders_date,'%Y-%m') = 2016-08-01 where DATE_FORMAT(orders_date,'%Y-%m') = 2016-09-01 where DATE_FORMAT(orders_date,'%Y-%m') = 2016-10-01
Date :
2016-09-29 11:56:51
By :
DisconnectOver
ก่อนจะนำตัวแปร $stdate ไปใส่ใน $where ก็ตัด วันที่ออกก่อนครับ
เพราะในเงื่อนไขคุณเช็คแค่ ปี กะ เดือน
Code (PHP)
$x = '2016-08-01';
echo date('Y-m', strtotime($x));
Date :
2016-09-29 12:20:24
By :
9nonameman
ปรับแล้วครับ งงมาก ไม่มีอะไรออกมาเลย
Code (PHP)
$stdate=$_GET['stdate'];
date('Y-m', strtotime($stdate));
ประวัติการแก้ไข 2016-09-29 13:47:59 2016-09-29 13:49:15 2016-09-29 13:54:57
Date :
2016-09-29 13:42:11
By :
DisconnectOver
$where=Singlequote where orders_date>=doublequote singlequote .$stdate.singlequote doublequote singlequote ;
ไม่น่าจะเป็นแบบ ข้างบนนะครับ
result ที่ได้ควรจะเป็น แบบนี้
Code (SQL)
where orders_date >= '2016-08-01' and order_date<'2016-08-02'
จากตัวอย่างข้างบน จะเป็นการกำหนดข้อมูลเฉพาะภายในวันที่ 2016-08-01 ก็ลองเขียนดูว่าจะให้ออกมาตามตัวอย่างยังไง
mysql statement ใช้ single quote ครอบส่วนของ value back quote ครอบส่วนของ name
ผมยังไม่เคยใช้ double quote ครอง value เลย
Date :
2016-10-01 02:43:13
By :
Chaidhanan
ผมทำตามที่ อาจารย์ Chaidhanan แนะนำแล้วครับ แต่ ปรากฎว่า ค้นหาตั้งแต่เดือน 8-10 เดือน 8 มีข้อมูลลแต่ข้อมูล แสดงผลแค่ 9-10 แคนั้นอะครับ ผมพลาดตรงไหนช่วยดูให้ทีครับ ขอบุณครับ
Code (PHP)
<?php while (date('Y-m',strtotime($stdate)) <= date('Y-m',strtotime($endate))) {
$where='where DATE_FORMAT(orders_date,"%Y-%m")>="'.$stdate.'" and DATE_FORMAT(orders_date,"%Y-%m") <"'.$stdate.'+1"';
$query = sprintf('select * from orders %s ',$where);
$result = mysqli_query($con,$query);
if (mysqli_num_rows($result)>0) {
?>
Date :
2016-10-03 09:43:02
By :
DisconnectOver
3. $query = sprintf('select * from orders %s ',$where);
echo $query; exit;
เพิ่มสีแดงต่อท้าย บันทัด 3
เอา result ที่ได้ บันทัดนี้มาแสดงหน่อยครับ
อยากให้เห็น statement sql เต็มๆ ว่าเป็นยังไง ทำไมถึงพอคิวรี่แล้วได้ข้อมูลไม่ตรงตามต้องการ
Date :
2016-10-03 10:53:50
By :
Chaidhanan
select * from orders where DATE_FORMAT(orders_date,"%Y-%m")>="2016-08-01" and DATE_FORMAT(orders_date,"%Y-%m") <"2016-08-01+1"
ได้แบบนี้ครับ อาจารย์
ประวัติการแก้ไข 2016-10-03 11:31:51 2016-10-03 11:34:36 2016-10-03 11:35:12
Date :
2016-10-03 11:29:40
By :
DisconnectOver
เสริมครับ ไม่รู้จะแก้ได้หรือยังนะครับ แต่ถ้าค้นหาแล้วเป็นวันที่ ทำไมไม่ลองใช้ between ดูบ้างครับ มันชัดเจนกว่า and
Date :
2016-10-03 13:38:08
By :
apisitp
ยังเลยครับ ไม่เคยลองใช้ between สักเท่าไหร่อะครับ ขอบคุณ อาจารย์ Mr.กล้า ที่แนะนำครับ
Date :
2016-10-03 14:26:49
By :
DisconnectOver
select * from orders where DATE_FORMAT(orders_date,"%Y-%m")>="2016-08-01" and DATE_FORMAT(orders_date,"%Y-%m") <"2016-08-01+1"
ตรงสีแดง มันไม่ใช่ วันที่ 2016-08-02 แต่เป็น text "2016-08-01+1"
$where='where DATE_FORMAT(orders_date,"%Y-%m")>="'.$stdate.'"
and DATE_FORMAT(orders_date,"%Y-%m") <"'.$stdate.'+1" ';
แก้เป็น
Code (PHP)
$where='where DATE_FORMAT(orders_date,"%Y-%m")>="'.$stdate.'"
and DATE_FORMAT(orders_date,"%Y-%m") <"'.date('Y-m-d', strtotime('+1 day', strtotime($stdate))).'" ';
หรือ
Code (PHP)
$where='where DATE_FORMAT(orders_date,"%Y-%m")>="'.$stdate.'"
and DATE_FORMAT(orders_date,"%Y-%m") <date_add("'.$stdate.'", interval 1 day)';
ลองเขียน เอาค่าจริงใส่แทนดูก็น่าจะเห็นข้อแตกต่าง
Date :
2016-10-04 13:23:24
By :
Chaidhanan
ขอบคุณครับ อาจารย์ Chaidhanan และ อาจารย์ Mr.กล้า ตอนนี้แก้ได้เรียบร้อยแล้วครับ ^_^ อีก 15 วันสอบตื่นเต้น ขอบคุณมาก ๆ ครับที่ให้คำแนะนำ ด้วยครับที่หาข้อมูลดี ๆ ศึกษาเพิ่มเติม ขอบคุณทุกๆ ท่านครับ ขอบคุณเพจ ดี ๆ ที่แนะนำความรู้ให้ครับ ^_^
ประวัติการแก้ไข 2016-10-04 14:15:23 2016-10-04 14:15:58
Date :
2016-10-04 14:14:22
By :
DisconnectOver
Load balance : Server 05