|
|
|
Auto generate number ช่วยชี้แนะเรื่องนี้ด้วย (PHP, MySQL) |
|
|
|
|
|
|
|
ผมลองปรัป code นิดหน่อยและกำลังทำการ รันครับ ได้ ผล ยังไง จะ มา แจ้ง อีก ครั้ง ครับ(น่าจะเย็นนี้ครับ..)
Code (PHP)
function GenReferenceSLC($dateInput, $JobTime, $JobArea){
$Generate_Job = "";
$Sql_genSLC = "SELECT * FROM order_messenger WHERE Job_Date = '".$dateInput."' AND Job_Time = '".$JobTime."'
AND Job_Area = '".$JobArea."'";
$Qr_genSLC = mysql_query($Sql_genSLC) or die (mysql_error());
$Qr_rows = mysql_num_rows($Qr_genSLC);
$Row_plus = $Qr_rows+1;
$Msn_Date = Msn_Date($dateInput);
if($Qr_rows == 0){
$Order_num = substr("01",-2);
$Generate_Job = $Msn_Date.$JobTime.$JobArea.$Order_num;
}else{
$Order_num = substr("0$Row_plus",-2);
$Generate_Job = $Msn_Date.$JobTime.$JobArea.$Order_num;
}
return $Generate_Job;
mysql_close($dbConn);
}
|
ประวัติการแก้ไข 2012-05-24 14:58:47
|
|
|
|
Date :
2012-05-24 10:11:39 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ๆคนไหน มีคำแนะเรื่องนี้ ก็ แนะนำผมด้วยนะครับ
|
|
|
|
|
Date :
2012-05-24 10:12:16 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จุดอ่อนของโค้ดชุดนี้อยู่ที่ห้ามลบข้อมูลในตารางครับ
เพราะในโค้ดใช้วิธีนับข้อมูลทั้งหมด แล้วเพิ่มไปหนึ่งเพื่อ generate เลขล่าสุด
ถ้าลบข้อมูลไปจริง ก็จะทำให้ซ้ำอย่างที่เจอปัญหา
ทางออกคือให้เพิ่มฟิวด์ขึ้นมาหนึ่งฟิวด์เพื่อใช้เป็นตัวบ่งชี้ว่า เรคคอร์ดนี้ถูกลบแล้ว
เหมือนกับทำระบบให้มี trash bin สามารถกู้เรคคอร์ดที่ถูกลบไปแล้วได้
|
|
|
|
|
Date :
2012-05-24 10:21:39 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับผมเข้าใจที่ คุณ Unidentifer พูดมานะครับ แต่ที่ผมบอก ว่ามันซ้ำคือ
2012-05-2420
2012-05-2420
มันซ้ำกันแบบนี้ครับ ไม่ได้ซ้ำ กับ เร็คคอร์ดที่ถูกลบไปแล้วครับ
ผมเลยอยากทราบว่าทำไม ถึง ซ้ำกันได้ครับผมเพราะ code ที่ผมเีขียนขึ้นมานี้ ก็ให้มัน +1 ตลอด แต่ เลขก็ยังมีซ้ำกันอยู่ผมก็เลยงงครับ
ยังไงก็แนะนำด้วยนะครับ
|
|
|
|
|
Date :
2012-05-24 13:56:06 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$Qr_rows = mysql_num_rows($Qr_genSLC);
ถ้าไล่ๆดูก็จะเห็นว่ามันทำงานอย่างไร
|
|
|
|
|
Date :
2012-05-24 14:03:31 |
By :
rootElement@kmutnb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สรุปแล้วเย็นนี้ ก็ยังมีซ้ำอยู่เช่นเคยครับ แต่น้อยลง เหลือ แค่ 1-2จ๊อบ
พี่ๆ มีไร แนะนำสำหรับเรื่องนี้ไหม ครับ
|
|
|
|
|
Date :
2012-05-24 20:56:07 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-0001
2012-05-0002
2012-05-0003
2012-05-0004
2012-05-0005
ตอนนี้นับจำนวนได้ ห้าเรคคอร์ด
2012-05-0001
2012-05-0002
......................
2012-05-0004
2012-05-0005
ถูกลบออกไปหนึ่ง 2012-05-0003 ซึ่งนับตอนนี้ได้ สี่เรคคอร์ด
พอจะหาเลขใหม่ ก็จะได้ 4+1 = 5
ทีนี้ก็ไปซ้ำกับ 2012-05-0005 ล่ะครับ
แต่ถ้าคุณไม่ได้ลบจริงเพียงแต่ mark ไว้ว่าเรคคอร์ดไหนไม่ได้ใช้แล้ว
2012-05-0001
2012-05-0002
2012-05-0003 --> mark for deletion
2012-05-0004
2012-05-0005
คุณก็จะนับได้ ห้า แล้วเอามาบวกด้วยหนึ่ง จะเป็นหก ซึ่งจะได้ 2012-05-0006
|
|
|
|
|
Date :
2012-05-24 21:34:24 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณ พี่ วิน ครับ ผม เอง ก็ ดัดแปลงมาจากตัวนั้นครับ
ขอบคุณ พี่ Unidentifer ครับ หลักการของพี่น่าสนใจดีเดียวครับ
ตอนนี้ กำลังคิด logic ใหม่ อยู่ครับ
ได้ผลยังไงจะแจ้งให้ทราบอีกครั้งครับผม
|
|
|
|
|
Date :
2012-05-25 10:24:44 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองแบบนี้ดูไหมครับ
ใช้ SELECT id สุดท้ายออกมา แล้วนำมา +1 แทน
เช่น
A0001
A0010
A0005
select id from table order by id DESC ที่ไม่เพิ่ม limit 1 เพราะ จะใช้กับ database ตัวอื่นได้
ก็จะได้
A0010 <-- ให้ fetch เอาข้อมูลมาแค่ตัวเดียว
จากนั้นก็ตัดเอามาแค่ตัวเลย
จะได้ 0010
จากนั้นก็เอาไป +1
บางทีอาจมีปัญหา + ไม่ได้ ก็แปลงเป็นตัวเลขก่อน โดย
(int) คิดว่าทำได้ หรือ เอาไป 0010 +0 ก็ได้เช่นกัน
ไม่รู้ว่าเข้าใจรึป่าว เป็นแค่ Idea โดยไม่ต้องไปยึดกับจำนวนข้อมูล
แค่เอา Id ตัวสุดท้ายไปทำงาน
* PHP สามารถ + เลขฐานได้นะครับ
เช่น 1A+1=1B (ฐาน16)
|
|
|
|
|
Date :
2012-05-25 10:50:34 |
By :
rootElement@kmutnb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แนวคิดของคุณ rootElement@kmutnb น่าสนใจมากๆ ครับ
แต่ตอนนี้ผม คิด logic ของ ตัวเอง ได้แล้วครับ เดี๋ยวจะลองใช้ก่อนครับ ถ้าไม่ได้ อกี ก็ คงจะทำ ประมาณที่ คุณ rootElement@kmutnb แนะนำครับ แนวคิดของคุณ rootElement@kmutnb ผมเห็นภาพแล้วครับ
ขอบคุณครับ 1
|
|
|
|
|
Date :
2012-05-25 12:06:45 |
By :
popnakub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|