|
|
|
ถาม - การ insert sql จาก 2 เครื่อง โดยเวลา พร้อมกัน ทุกอย่าง....อ่านต่อด้านในครับ |
|
|
|
|
|
|
|
พอดีผมจำเป็นต้องสร้างรหัส เลขที่ ออเดอร์ โดยใช้วันเดียวกับวันที่ปัจจุบัน แต่มีอยู่เคสหนึ่ง ลูกค้า เซสชั่น ไอดี คนละเบอร์ แต่ทำการสั่งซื้อพร้อมกัน ทุกอย่าง ตรงกันหมด ทำให้เลขที่ ออเดอร์ ที่ถูกสร้าง เป็นเลขที่เดียวกัน ตรงนี้ผมอยากขอความเห็นว่ามีวิธีป้องกันยังไงครับ
เหตุผลว่าทำไมผมไม่ใช้ตัว id ที่เป็น autoincrement มาเป็นเลข order ก็เพราะว่าต้องใช้นับจำนวนคนสั่งซื้อต่อวัน
และรหัสจะถูก +1 ทุกครั้งหลังการสั่งซื้อ
โดยลำดับเหตุการณ์ของการทำงานนะครับ
1 insert data ลูกค้าที่ทำการสั่งซื้อเข้ามา (อันนี้แหละที่มีปัญหาเนื่องจากลูกค้าดันสั่งซื้อพร้อมกัน เวลาเดียวกัน) โดยเลขที่ order id จะยังไม่ถูกสร้าง
Code (PHP)
$sqll = "insert into customer (ss_id,fname,lname,email,street_address,city,state,zip_code,country,mobile,date,time,status)";
$sqll .= "values('".$session_id."','".$_POST['Firstname']."','".$_POST['Lastname']."','".$_POST['Email']."','".$_POST['Street_address']."','".$_POST['City']."','".$_POST['State']."','".$_POST['Zip_code']."','".$_POST['Country']."','".$_POST['Mobile']."','".date("Y-m-d")."','".date("H:i:s")."','Pending')";
$rss = mysql_query($sqll,$dbcon);
2.ค้นหาลูกค้าที่ทำการสั่งซื้อเข้ามาแล้ว โดยที่ เลขที่ ออเดอร์ ต้องไม่เป็นค่าว่าง และเป็นข้อมูลล่าสุดเท่านั้น เพื่อใช้ในการสร้างเลขที่ ออเดอร์
$str_order = "select * from customer where order_id !='' order by id desc";
$rs_order = mysql_query($str_order,$dbcon);
$no_order = mysql_fetch_array($rs_order);
///////////// ทำการสร้างเลขที่ ออเดอร์ ตาม วัน / เดือน / ปี //////////////////
$Y = substr(date('Y'),2);
$M = date('m');
$D = date('d');
///////////// สร้างเลขที่ ออเดอร์ ใหม่โดยใช้วันที่ ปัจจุบัน //////////////////
if($no_order['date'] == $date){
$invoic0 = substr($no_order['order_id'],7);
$no = $invoic0 +1;
$invoic1 = substr("00000".$no,-4,4);
$invoic = $faq['name'].$Y.$M.$D.$invoic1;
}else{ /////////////// สร้างเลขที่ ออเดอร์เดิม โดยใช้วันที่ต่อเนือง
$no = 1;
$invoic1 = substr("00000".$no,-4,4);
$invoic = $faq['name'].$Y.$M.$D.$invoic1;
}
3.ค้นหาลูกค้าที่ทำการสั่งซื้อเข้ามาแล้ว โดยที่ยังไม่มีเลขที่ ออเดอร์ ลอยๆเพื่อใช้ในเงื่อนไขตอน update
$strsql = "select * from customer where ss_id = '".$session_id."' and order_id = ''";
$strres = mysql_query($strsql,$dbcon);
$array = mysql_fetch_array($strres);
4.สร้างเลขที่ออเดอร์ โดยไปอัพเดทในข้อมูลที่ถูกสร้างไว้แล้ว
Code (PHP)
mysql_query("update customer set order_id = '".$invoic."' where id = '".$array['id']."' and ss_id = '".$session_id."'");
Tag : PHP, MySQL
|
|
|
|
|
|
Date :
2012-11-09 15:29:02 |
By :
Dragons_first |
View :
2229 |
Reply :
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้เป็นข้อมูลที่ลูกค้า ทำการสั่งซื้อเข้ามาพร้อมกัน
|
|
|
|
|
Date :
2012-11-09 15:30:57 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก่อนบันทึก ให้ ไป select หา invoice last order แล้ว เอามาเปรียบเทียบ ถ้ามีให้ เอา +1 แล้ว บันทึกทันที น่าจะไม่ซ้ำแล้ว นะ คิดว่า
|
|
|
|
|
Date :
2012-11-09 17:52:02 |
By :
moomoohorn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตั้งเป็นค่า เอกลักษณ์ ได้ไหม เพราะจะได้ ห้ามซ้ำ ห้ามเป็นค่าว่าง
|
|
|
|
|
Date :
2012-11-14 01:16:13 |
By :
chanajun |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|