|
|
|
insert ข้อมูลเข้า Database พร้อมต่างกัน 2 วินาที แล้วได้รหัสซ้ำกัน |
|
|
|
|
|
|
|
https://www.thaicreate.com/community/forum/110046.html
สาเหตุ อ่านค่า max id มาไว้ใน buffer เวลาใกล้กันก็จะได้ max id เดียวกัน
ต้องจัดการด้วยการ คิวรี่ก่อน โดยบวก 1 ในคำสั่ง sql statement แล้ว จีงอ่านค่า index ที่ได้
วิธีที่ง่ายที่สุดคือการทำ autoincrement เพื่อใช้อ้างอิง record
โปรแกรมส่วนใหญ่จะ ซัพพอร์ต การคืนค่า autoincrement
|
ประวัติการแก้ไข 2024-08-09 16:58:45
|
|
|
|
Date :
2024-08-09 16:51:33 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
กรณีไม่ใช่ primary key แต่จะต้องไม่ซ้ำกัน ก็ให้กำหนดคอลัมน์นั้นเป็น unique
ขั้นตอนนี้หลังกำหนดแล้วถ้าการ insert มีค่าซ้ำกัน มันจะ error ก็หาทางแก้ได้หลายวิธีอยู่ที่การออกแบบ
ถ้ามันเป็น error แบบ throw exception ก็ใช้ try catch มาช่วยในการทดลองกำหนดค่าใหม่ลงไป
|
ประวัติการแก้ไข 2024-08-09 18:26:39
|
|
|
|
Date :
2024-08-09 18:25:27 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PHP มีการเข้าคิว หรือจองเลขการทำรายการมั้ยคะ
|
|
|
|
|
Date :
2024-08-19 10:53:22 |
By :
JuNiorWP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$db=new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$sql = <<<SQL
insert into TB_NAME ( req_no, field_อื่น_1, field_อื่น_2)
SELECT
CONCAT( 'OT',
YEAR(NOW),
RIGHT(d + 100001,5)
),
## value_field_อื่นๆ
?, ?
FROM (
SELECT 0 as d
UNION ALL
SELECT MAX( RIGHT( req_no, 5) ) FROM TB_NAME
) AS TMP
order by d DESC LIMIT 1
SQL;
$stmt=$db->prepare($sql);
$stmt->bind_param('ss', $var_1, $var_2);
$stmt->execute();
$id=$stmt->insert_id;
/--------------------
$rs=$db->query('selecct * from TB_NAME where idx='.$id);
$row = $rs->fetch_object();
$req_no = $row->req_no; // เอา $req_no ไปใช้อ้างอิงกับ ตารางอื่นๆ ต่อไป
|
|
|
|
|
Date :
2024-08-20 12:27:30 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปล. idx ต้องเป็น primary key auto increment
ส่วน req_no เปลี่ยนไปเป็น unique_key
|
|
|
|
|
Date :
2024-08-20 12:32:41 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|