|
|
|
สอบถามเรื่องอัตเดพค่าอัตโนมัติหน่อยครัฟว่าทำอย่างไร |
|
|
|
|
|
|
|
ไม่แน่ใจว่า mysql มีการ รันjob หรือเปล่า
แต่ถ้าจะเอา ง่ายๆ
ก็ เขียน php มา เพื่อทำการ update data ตามที่ต้องการ
แล้ว ใช้ task scheduler ของ window มาเรียก file run php นั้นทุกๆ วัน(set trigger daily)
ส่วน action นั้น ก็ เรียก
path iexplore.exe ตามด้วย url
Ex. C:\Program Files (x86)\Internet Explorer\iexplore.exe http://www.xxxxxx.com/xxxx.php
ถ้าเป็น linux ตั้งที่ crontab คับ คงประมาณนี้ คับ (ไม่ได้ใช้นานแล้ว)
พิมพ์ crontab -e
แล้ว add
50 1 * * * lynx -dump http://www.xxxxxx.com/xxxx.php
มัน จะรัน ทุกๆวันตอน ตีหนึ่ง 50 นาที
ผิดพลาดยังไง ขออภัยด้วยนะคับ
|
|
|
|
|
Date :
2014-01-20 14:42:21 |
By :
gumix |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครัฟ จะลองไปศึกษาข้อมูลดู เเต่ถ้ามีตัวอย่าง จะดีมากเลยครัฟ
|
|
|
|
|
Date :
2014-01-20 18:26:07 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หรือไม่ก็ลองแบบนี้ครับ ฟิล us_enddate คือกำหนดวันครบกำหนดหรือเปล่าครับ ถ้าผมเข้าใจถูก
ให้ select ฟิล us_enddate ออกมาครับพอ select ออกมาแล้วก็นำตัวแปร us_enddate มาใส่แบบนี้ครับ
Code (PHP)
$exp_date = $row['us_enddate']; //ประกาศตัวแปร us_enddate ตรงนี้ครับ
$d = explode("/",$exp_date);
$timestamp = mktime(00, 00, 00, $d[1], $d[0], $d[2]);
if($timestamp<=time()) {
//ในส่วนนี้เขียน mysql update ฟิล us_status จาก 1 เป็น 2 ครับ
}
ส่วนโค้ดนี้ก็นำไปวางไว้หน้าไหนก็ได้ครับที่ต้องการให้มัน Action ครับ
และควรจะอยู่เหนือระบบที่คุณ select us_status ออกมาใช้งานครับ
|
ประวัติการแก้ไข 2014-01-21 00:00:39 2014-01-21 00:17:08
|
|
|
|
Date :
2014-01-21 00:00:27 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากเลยครัฟ
|
|
|
|
|
Date :
2014-01-21 04:07:19 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เราต้องใส่ไว้ประมาณหน้าไหนครัฟ SELECT หรือ UPDATE
|
|
|
|
|
Date :
2014-01-22 00:52:18 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณกำลังทำระบบอะไรบอกผมได้มั๊ยครับ ผมจะได้แนะนำถูกว่าควรจะไปไว้หน้าไหน
แต่จริงๆ ควรจะไว้หน้าเดียวกับที่คุณ SELECT us_status ออกมาใช้งานน่ะคับ และควรไว้ข้างบน คำสั่ง SELECT
|
|
|
|
|
Date :
2014-01-22 01:27:53 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมทำระบบฝากของ ครัฟ
ประมาณนี้
สถานะ 1 คือ อยู่ระหว่างฝาก
สถานะ 2 คือ ซื้อคืนแล้ว
สถานะ 3 คือ หลุดฝาก
หน้านี้ ผม ก็ SELECT ข้อมูลมาดู ประมาณนี้ เพราะ มี 3 ตารางมาจอยกัน
$sql_select = "SELECT*FROM tb_asset
INNER JOIN tb_assetprice ON tb_assetprice.us_id = tb_asset.us_id
INNER JOIN tb_customer ON tb_customer.us_id = tb_asset.us_id " ;
}
$serault = mysql_query($sql_select) or die(mysql_error());
นี้ชื่อ ตาราง tb_assetprice ส่วนที่ต้องการให้ อัพเดท us_status
|
ประวัติการแก้ไข 2014-01-22 08:31:29
|
|
|
|
Date :
2014-01-22 08:29:51 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เขียน code php ขึ้นมา file นึง
code php ก็ให้มัน
update us_status = 2 from tb_assetprice where CURDATE() > DATE(STR_TO_DATE(us_enddate, '%d/%m/%Y'))
/** mysql ผม ไม่ค่อยถนัดนะคับ แต่น่าจะประมาณนี้ **/
code php ส่วนนี้ ก้อจะ เอาวันที่ ปัจจุบัน มาเทียบ กับ us_enddate ถ้า วันที่ปัจจุบัน มากกว่า ก็จะ update us_status =2
สมมุติว่า ให้ file php นี้ ชื่อ update_us_status.php
เราก้อจะได้ file php ที่ update us status แล้ว
หลังจากนั้น จะต้อง run page นี้ ทุกๆวัน
เนื่องจาก mysql ไม่มี job ให้มันรัน ทุกๆ วันเองได้ จึง ต้อง อาศัย
task scheduler ของ window (ถ้า server เป็น window)
หรือ
crontab ของ linux (ถ้า server เป็น linux)
มาช่วย ตั้งให้มัน เข้าไป run page php นั้น อัตโนมัติ เอง ทุกๆ วัน
ในกรณี server window
ให้ create task schedule แบบ daily (มันจะ run ทุกๆ วัน ตามเวลาที่กำหนด)
แล้ว สั่ง action ให้มัน
ไปเรียก path iexplore.exe ตามด้วย url
ตัวอย่าง C:\Program Files (x86)\Internet Explorer\iexplore.exe http://localhost/update_us_status.php
ในกรณี server linux ตั้งที่ crontab คับ คงประมาณนี้ คับ (ไม่ได้ใช้นานแล้ว)
พิมพ์ crontab -e
แล้ว add
50 1 * * * lynx -dump http://localhost/update_us_status.php
มัน จะรัน ทุกๆวันตอน ตีหนึ่ง 50 นาที
อธิบาย คร่าวๆ ของ crontab ของ linux
คือ ตามปกติ จะมี * อยู่ 5 ตัว ข้างหน้าง command ที่เราจะให้ run
* * * * *
ซึ่งตัว * แต่ละหลักมีความหมายตามนี้
* ตัวที่ 1 คือ นาที ( 0-59 )
* ตัวที่ 2 คือ ชั่วโมง ( 0-23 )
* ตัวที่ 3 คือ วันในรอบเดือน ( 1-31 )
* ตัวที่ 4 คือ เดือน (1-12)
* ตัวที่ 5 คือ วันในสัปดาห์ (0-6 วันอาทิตย์=0 )
ถ้าจะให้ run ทุกๆ วัน ก็ ใส่ แค่ เวลาที่จะให้ รัน เช่น รัน ตี1 50 นาที
50 1 * * * ตามด้วย command
ปล อ้างอิง cron มาจาก
http://blogs.pukprasit.net/blog1.php/crontab-task-scheduling-on-unix-linux
และ
http://www.clusterkit.co.th/techblog/content_view.php?blog_id=00026
ดังนั้น แค่นี้ ก็น่าจะได้ตามที่ต้องการแล้วนะครับ
ปล. ผมไม่ค่อยถนัด mysql กับ linux สักเท่าไหร่ ผิดผลาดยังไงขออภัยด้วยครับ
ปล2. อย่างที่บอกไว้ ตอน comment 1 นะคับ ว่า ไม่แน่ใจว่า mysql มีการ รันjob หรือเปล่า
ถ้า มี job เหมือน mssql ให้ใช้ job run command update ได้เลยครับ
ผิดพลาดยังไง ขออภัยด้วยครับ
|
|
|
|
|
Date :
2014-01-22 11:08:57 |
By :
gumix |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็แบบนี้ครับ ผมเขียนมาให้ครบเลยนำไปใส่ไว้หน้าที่คุณ Select ข้อมูลออกมาโชว์ได้เลย และไว้ข้างบนคำสั่ง Select ข้อมูลที่โชว์นะครับ
Code (PHP)
$sql_query_1 = mysql_query("SELECT us_id,us_enddate FROM tb_assetprice") or die(mysql_error());
while($update_status=mysql_fetch_array($sql_query_1)){
$d = explode("/",$update_status['us_enddate']);
$timestamp_enddate = mktime(00, 00, 00, $d[1], $d[0], $d[2]);
if($timestamp_enddate<=time()){
mysql_query("UPDATE tb_assetprice SET us_status='3' WHERE us_id='".$update_status['us_id']."'") or die(mysql_error());
}
}
ปล. ไม่จำเป็นต้องรันหน้านี้ทุกวัน ลองนึกตามผมนะครับ โค้ดนี้จะทำงานก็ต่อเมื่อมีการรันเผจที่มีโค้ดนี้ฝังอยู่
ยกตัวอย่างเช่น:
นายเอ ฝากของไว้ ซึ่งวันครบกำหนดมาไถ่คืนสมมุติเป็น 25/01/2014 ปรากฎว่าตั้งแต่วันที่ 23/01/2014 จนถึงวันที่ 27/01/2014
ยังไม่มีการเปิดหน้าที่โชว์ข้อมูลรายการการฝากของ โค้ดก็จะยังไม่ทำงานถูกมั๊ยครับ us_status ก็จะยังคงเป็นค่า 1 อยู่ ซึ่งมันอยู่ในฐานข้อมูลซึ่งไม่มีใครเปิดเข้าไปดูและไม่มีใครรู้หรอก ปรากฎว่าวันที่ 27/01/2014 มีการเปิดเข้ามาดูข้อมูลรายการฝากของเป็นครั้งแรก โค้ดจึงมีการทำงานและอัพเดทข้อมูลให้เรียบร้อย ก่อนที่จะทำการ Select ข้อมูลออกมาโชว์แสดงในหน้าเผจ และหน้าเผจก็แสดง us_status เป็นข้อมูลใหม่แล้ว นั่นก็คือ 3 คือ หลุดฝาก เหตุผลนี้ผมถึงบอกว่าให้นำโค้ดไปวางไว้ด้านบน โค้ด SELECT แสดงรายการฝาก เพราะต้องการให้่มัน processing ตรวจหารายการที่ครบกำหนดและเลยกำหนด และทำการอัพเดทข้อมูลก่อน ก่อนที่จะแสดงรายการฝาก และนี่ก็คือเหตุผลที่ไม่จำเป็นต้องเปิดหน้านี้ทุกวัน จะเปิดเวลาไหน เลยไป 1 อาทิตย์ ระบบก็ทำงานไม่ผิดพลาดและคลาดเคลื่อน.... ลองดูนะครับได้ไม่ได้ยังไง แจ้งด้วยครับ ผมจะได้หาวิธีช่วยต่อไป....
|
ประวัติการแก้ไข 2014-01-22 19:47:37
|
|
|
|
Date :
2014-01-22 19:42:15 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ให้ วางไว้ ก่อนโค้ด SELECT ข้อมูลมาโชว์
<?php
@session_start();
@ob_start();
include("../ldb/Utility.php");
connect_db();
check_login("username", "loginadmin.php");
$sess_user = $_SESSION["username"];
//// อัตเดพค่าอัตโนมัติ
$sql_query_1 = mysql_query("SELECT us_id,us_enddate FROM tb_assetprice") or die(mysql_error());
while($update_status=mysql_fetch_array($sql_query_1)){
$d = explode("/",$update_status['us_enddate']);
$timestamp_enddate = mktime(00, 00, 00, $d[1], $d[0], $d[2]);
if($timestamp_enddate<=time()){
mysql_query("UPDATE tb_assetprice SET us_status='3' WHERE us_id='".$update_status['us_id']."'") or die(mysql_error());
}
}
///ค้นหา
$tea_sub = $_POST['sh_sub']; //สถานะ
$tea_subt = $_POST['sh_subt']; //ชื่อ-สกุล
$tea_subt1 = $_POST['sh_subt1']; //เลขที่สัญญา
$tea_subt2 = $_POST['sh_subt2']; //เลขประจำตัวประชาชน
$tea_subt3 = $_POST['sh_subt3']; //ประเภทสินทรัพย์
$key_world = $_REQUEST["keyworld"];
if(isset($key_world)){
$sql_select = "SELECT*FROM tb_asset
INNER JOIN tb_assetprice ON tb_assetprice.us_id = tb_asset.us_id
INNER JOIN tb_customer ON tb_customer.us_id = tb_asset.us_id
WHERE us_status = '".$tea_sub."' OR us_name = '".$tea_subt."' OR customer_id = '".$tea_subt1."' OR us_number = '".$tea_subt2."' OR us_category = '".$tea_subt3."' " ; //ค้นหา แบบ key_world
}else{
//จอยตารางมาโชว์
$sql_select = "SELECT*FROM tb_asset
INNER JOIN tb_assetprice ON tb_assetprice.us_id = tb_asset.us_id
INNER JOIN tb_customer ON tb_customer.us_id = tb_asset.us_id " ;
}
$serault = mysql_query($sql_select) or die(mysql_error());
$row = mysql_fetch_array($resault);
$coun_ = mysql_num_rows($serault);
?>
ประมาณนี้ ใช่หรือ เปล่า ครัฟ
หรือ ต้อง สร้างฟ้าย มาฟ้ายหนึงก่อนเหมือน ตอนเเรกที่ ว่า ครัฟ
|
ประวัติการแก้ไข 2014-01-22 22:15:23
|
|
|
|
Date :
2014-01-22 22:10:19 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถูกครับ แบบนี้ถูกต้องแล้วครับ ลองรันดูหรือยังครับ ว่ามันทำงานหรือป่าว
|
|
|
|
|
Date :
2014-01-22 22:19:59 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากเลยครัฟ อัพเดท ให้เเล้ว
|
|
|
|
|
Date :
2014-01-22 22:32:30 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดีใจด้วยคับ
เพื่อการ Processing ที่เร็วขึ้น ผมปรับปรุงโค้ดให้นิดหน่อยครับ ตามโค้ด้านล่างเลยคับ
Code (PHP)
$sql_query_1 = mysql_query("SELECT us_id,us_enddate FROM tb_assetprice WHERE us_status='1'") or die(mysql_error());
while($update_status=mysql_fetch_array($sql_query_1)){
$d = explode("/",$update_status['us_enddate']);
$timestamp_enddate = mktime(00, 00, 00, $d[1], $d[0], $d[2]);
if($timestamp_enddate<=time()){
mysql_query("UPDATE tb_assetprice SET us_status='3' WHERE us_id='".$update_status['us_id']."'") or die(mysql_error());
}
}
|
|
|
|
|
Date :
2014-01-22 22:49:52 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากๆๆ เลย ครัฟ
|
|
|
|
|
Date :
2014-01-23 02:11:30 |
By :
tee101klin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|