ยังลบ แบบ auto ไม่ได้เลยครับ ช่วยดู ให้ทีน่ะครับ ผมใช้ code นี้ในการลบ ใบสั่งซื้อ
ดูในกระทู้นี้นะ เห็นบอกว่าใช้ Cron ซึ่งผมเองก้ไม่เคยใช้ 5555
https://www.thaicreate.com/php/forum/028737.html
แต่ที่ผมทำอยู่ ก็จะใช้วิธีการ include ไฟล์มาไว้ที่หน้าแรกของเว็บไซต์เอา ถ้าผู้ใช้งานโหลดหน้าแรกมันก็จะเรียกใช้ไฟล์ include เพื่อ Run ทำสั่งที่เราเขียนไว้
แบบนี้มันก็ ลบให้อัตโนมัติละ หุหุหุหุ แต่ถ้าไม่มีคนเปิดหน้าแรก มันก็ไม่ลบให้นะ 555
Date :
2010-04-30 19:42:52
By :
somparn
ผมก็เอา code นี่แหละ แปะ ไว้หน้า index แต่ไม่รู้ทำไมมันไม่ยอมลบให้ งง
แล้ว cron คือ อาไรอะครับ
Date :
2010-04-30 19:53:08
By :
chonburi f.c
ยังไม่ได้เลยครับ
Date :
2010-04-30 21:02:16
By :
chonburi f.c
เงอ
Date :
2010-04-30 22:31:17
By :
chonburi f.c
นายชื่ออะไรอะ ไม่ได้ถามชื่ออะ เจอกันบ่อย ถามเลยละกัน
Code (PHP)
$DateDel = date('Y-m-d',strtotime("-5 day"));
$SQL="delete o_id from tb_order WHERE o_date2 < '".$DateDel."' ";
//มันไม่ลบยังไงอะนายจะให้มันทำยังไงแบบว่าลบเองเลยใช่มะ
Date :
2010-05-01 00:12:58
By :
Manussawin
$SQL="delete o_id from tb_order WHERE o_date2 < '".$DateDel."' ";
มีส่วนเกิน
Date :
2010-05-01 00:42:18
By :
plakrim
คุณ emboy ผมชื่ออุ้ย แล้วคุณละ ใช่ๆๆ ผมอยากให้มันลบแบบ auto เลย ยังทำไม่ได้เลย
ผมไม่เข้าใจความหมายอะน่ะว่า
$DateDel = date('Y-m-d',strtotime("-5 day"));
$SQL="delete from tb_order WHERE o_date2 < '".$DateDel."' ";
ถ้าเขียนแบบเนี่ย มันลบ ใบสั่งซื้อทุกใบเลยที่อยู่ใน tb_order เมื่อ o_date2 น้อยกว่า วันปัจจุบันหรือยังไง ทำไมต้องใส่ ลบ 5 ไปด้วยอะ งง
Date :
2010-05-01 06:59:46
By :
chonburi f.c
ผมเอา o_id ออกแล้วเหมือนเดิมครับ
Date :
2010-05-01 07:04:17
By :
chonburi f.c
ยังไม่ได้ครับผม
Date :
2010-05-01 13:15:44
By :
chonburi f.c
echo ดู $DateDel ว่ารูปแบบออกมาเหมือนรูปแบบของ o_date2 หรือเปล่า ถ้ารูปแบบเหมือนกัน และเข้าเงื่อนไขก็ต้องลบได้อยู่แล้ว
Date :
2010-05-01 13:59:05
By :
a
ลอง echo ดูแล้วครับ วันที่เหมือนกัน ทุกอย่าง แต่ไม่แน่ใจว่า เวลามันจะเกี่ยวด้วยหรือป่าวครับ เพราะตอนเก็บเก็บค่าเวลามาด้วย
Date :
2010-05-01 17:17:38
By :
chonburi f.c
ผมก็ไม่รู้นะ ปกติเวลาเราจะลบเราก็ต้องลบโดยกดปุ่ม submit หรืออะไรก็ได้ที่เราจะให้ สคริปทำงานแล้วมันก็จะลบให้แต่นี้หมายถึงอยู่ๆมันจะลบให้ แล้วจะทำอย่างไรแบบว่ามัน submit เอง ประมาณนี้ป่าว ดันๆละกัน
Date :
2010-05-01 17:37:20
By :
Manussawin
ใน db เก็บค่าแบบ datetime ใช่ไหม
แสดงว่ารูปแบบไม่ตรงกัน มันก็ select ไม่ได้อะไรออกมา
ถ้างั้นต้องใช้
Delete from tb_order
where CONCAT( MID( o_date2 , 1, 4 ) , MID(o_date2 , 6, 2 ), MID(o_date2 , 9, 2 ) ) < CONCAT( MID( '2010-05-02', 1, 4 ) , MID( '2010-05-02', 6, 2 ), MID( '2010-05-02', 9, 2 ) )
ตรงที่เป็น 1,4 และ 6,2 เปลี่ยนแปลงได้ขึ้นอยู่กับรูปแบบการเก็บวันที่ และตรงที่ 2010-05-02 เนี่ยก็ใส่ตัวแปรแทนเข้าไป
ต้องทำให้รูปแบบเหมือนกันก่อนมันถึงจะเปรียบเทียบกันได้
Date :
2010-05-01 17:37:46
By :
a
จะทำแบบนี้ o_date2 ต้องเป็น datetime ครับ ถ้าไม่ใช่ ต้องแปลงให้เป็น datetime ก่อน
Date :
2010-05-01 18:28:21
By :
plakrim
ได้สิ เพราะว่าแปลงให้อยู่ในรูปแบบ yyyy-mm-dd เหมือนกัน โดยที่ข้อมูลใน DB ก็เอาแค่ yyyy-mm-dd ไม่ได้เอาเวลามาด้วยนี่คะ (แล้วก็ลองทำดูแล้วมันก็ลบได้นะคะ)
Date :
2010-05-01 18:40:07
By :
a
อาจจะได้ครับ แต่อาจพลาดได้เช่นกัน เพราะมันเป็นการเปรียบเทียบสตริง ไม่เหมือนเทียบวันที่หรอกครับ
Date :
2010-05-01 18:45:41
By :
plakrim
อธิบายใหม่ดีกว่า
สมมุติ o_date2 มีรูปแบบ yyyy-mm-dd hh:mm:ss
แต่ $DateDel มีรูปแบบ dd-mm-yyyy
CONCAT( MID( o_date2 , 1, 4 ) , MID(o_date2 , 6, 2 ), MID(o_date2 , 9, 2 ) )
ตัดปีของ o_date2 ตัดเดือนของ o_date2 ตัดวันที่ของ o_date2
CONCAT( MID( '$DateDel', 7, 4 ) , MID('$DateDel', 4, 2 ), MID('$DateDel', 1, 2 ) )
ตัดปีของ $DateDel ตัดเดือนของ $DateDel ตัดวันที่ของ $DateDel
แล้วก็เอามาเปรียบเทียบกัน ที่บอกว่าต้องให้รูปแบบเหมือนกันคือ รูปแบบที่ใช้ในการเปรียบเทียบค่ะ
Date :
2010-05-01 18:56:05
By :
a
ตกลงว่า เก็บข้อมูลในรูปแบบไหนหรอค่ะ
Date :
2010-05-01 18:58:20
By :
^_^mOo_OoM^_^
คุณ PlaKriM คะ ช่วยอธิบายถึงความผิดพลาดที่อาจจะเกิดขึ้นให้ฟังหน่อยได้ไหมคะ
เพราะตลอดเวลาที่ผ่านมาไม่รู้ถึงข้อเสียนี้เลยค่ะ
Date :
2010-05-01 19:04:57
By :
a
ผมเก็บแบบ datetime ที่มีเวลาด้วยอะน่ะ ผมต้องใช้ code ไหนกันแน่ครับ อิอิอิ ขอบคุณทุก answer น่ะครับ
Date :
2010-05-01 19:42:16
By :
chonburi f.c
Delete from tb_order
where CONCAT( MID( o_date2 , 1, 4 ) , MID(o_date2 , 6, 2 ), MID(o_date2 , 9, 2 ) ) < CONCAT( CONCAT( MID( '$DateDel', 1, 4 ) , MID('$DateDel', 6, 2 ), MID('$DateDel', 9, 2 ) )
แต่คุณต้องดูว่า $DateDel ของคุณเป็นแบบไหน อย่างตัวอย่างถ้าเป็น 2010-05-01 ก็ใช้เหมือนตัวอย่างได้เลย
อธิบาย code
MID( '$DateDel', 1, 4 ) ก็คือ ตัด $DateDel ตั้งแต่ตัวที่1 และตัดจำนวน 4 ตัว ก็จะได้ ปีออกมา
ลอง เอา sql นี้ไป run ที่ฐานข้อมูลดูสิว่าลบได้หรือเปล่า
ลองกับฐานข้อมูล test ดูก็ได้
Date :
2010-05-01 20:05:34
By :
a
แหมะอ่อนน้อม ถ่อมตนจิงๆพี่ปรากริม อย่างนี้สิที่เขาเรียกว่า คมในฝัก ใช่ไหมพี่
Date :
2010-05-01 20:28:40
By :
Manussawin
เอาครับ เรารักกันไว้น่ะครับผม อย่า ให้เป็นแบบ สถานะการข้างนอกเลยครับ ปวดหัว แค่นี่ก็พอแล้วครับ ขอบคุณอีกรอบครับ
Date :
2010-05-01 20:40:49
By :
chonburi f.c
ที่ถามเนี่ยคืออยากรู้จริงๆ ว่ามันมีข้อเสียอะไรบ้างเราจะได้นำไปปรับปรุง
แต่ใน mysql มันมีการเก็บแบบ date กับ datetime นี่คะ
ของเราเก็บแบบ date เฉยๆ นะ มันมีรูปแบบเป็น yyyy-mm-dd
*****แล้วที่ให้ concat น่ะ ลืมบอกไปว่าเราจะต้อง เอาปีแล้วตามด้วยเดือนและวันตามลำดับ
อย่างเช่นที่คุณ PlaKriM ให้ตัวอย่างมาน่ะ
01-05-2010
02-05-2010
03-05-2010
01-04-2010
02-04-2010
03-04-2010
หา record ที่น้อยกว่า 02-05-2010
เราทำให้เป็น
where CONCAT( MID( field , 7, 4 ) , MID(field , 4, 2 ), MID(field , 1, 2 ) ) < CONCAT( CONCAT( MID( '02-05-2010', 7, 4 ) , MID('02-05-2010', 4, 2 ), MID('02-05-2010', 1, 2 ) )
สมมุติ field =01-05-2010
มันก็จะได้ where 20100501 < 20100502
สมมุติ field =03-05-2010
มันก็จะได้ where 20100503 < 20100502
สรุปแล้วของคุณ chonburi f.c ลบได้หรือยังคะ
Date :
2010-05-02 12:43:07
By :
a
ได้แล้วครับ ผมใช้แบบนี้ แล้วถ้าผมจะทำให้มันลบข้อมูลที่ key กันก็คือ tb_order_detail ผมต้องใส่เงื่อนไขเข้าไปใช่ไหมอะ
Code (PHP)
///////**********ตัดใบ order เมื่อครบวันที่กำหนด************////////
$date=date("Y-m-d H:i:s");
$sqldate=mysql_query("Select * From tb_order");
while($row=mysql_fetch_array($sqldate)){
if($row[o_date2]<$date){
mysql_query("delete From tb_order where status='รายการใหม่' and o_date2='$row[o_date2]'");
}
}
Date :
2010-05-02 13:24:26
By :
chonburi f.c
ใน tb_order_detail เก็บ วันที่ไว้หรือเปล่า
ถ้าไม่ได้เก็บก็สั่งให้ลบทีเดียว 2 ตารางเลย โดยใช้ left join ค่ะ
SELECT *
FROM tb_order_header
LEFT JOIN tb_order_detail ON tb_order_header.rd_h_id = tb_order_detail.rd_h_id
WHERE CONCAT( MID( rd_h_date, 1, 4 ) , MID( rd_h_date, 6, 2 ) , MID( rd_h_date, 9, 2 ) ) < CONCAT( MID( '2010-05-03', 1, 4 ) , MID( '2010-05-03', 6, 2 ) , MID( '2010-05-03', 9, 2 ) )
ปล. ขอโทษนะคะ #23 เขียน code ผิด
Delete from tb_order
where CONCAT( MID( o_date2 , 1, 4 ) , MID(o_date2 , 6, 2 ), MID(o_date2 , 9, 2 ) ) < CONCAT( MID( '$DateDel', 1, 4 ) , MID('$DateDel', 6, 2 ), MID('$DateDel', 9, 2 ) )
Date :
2010-05-02 14:27:12
By :
a
Load balance : Server 01