จากที่อ่านหลายๆ กระทู้ เห็นมีปัญหากับการ insert record สำหรับ ตารางที่มี index เป็นตัวอักษรผสมตัวเลข
ซึ่งหลายคำตอบ มักจะใช้ การคิวรี่ และมาประมวลผลในการสร้าง ตัวแปร จาก PHP
โดยวิธีการที่ทำผ่าน PHP หรือ Server Application อื่นๆ มันเป็นการส่ง 2 Statement
อาจทำให้มีปัญหา หากทำงานหลายเครื่องพร้อมกัน แต่วิธีข้างล่างเป็นคำสั่งให้ Database Server ทำงานครั้งเดียวครับ
เพราะเป็นการประมวลผลบน database server ไม่มีการเหลือมคิว กันแน่นอนครับ
วิธีการเก็บลง database Code (SQL)
insert into tdte
SELECT
null,
CONCAT(
n.cym,
SUBSTR( coalesce(m.IDX, 1)+100000,2)
)
FROM (SELECT SUBSTRING( CONCAT(YEAR(NOW()), SUBSTRING( MONTH(NOW())+100,2) ),3) as cym) as n
LEFT JOIN (SELECT SUBSTRING(dte,1,4) ym , MAX(SUBSTRING(dte,5,5)) IDX FROM tdte GROUP BY ym ) m on m.ym=n.cym
หมายเหตุ สร้างตามราง จาก column ด้านซ้าย
id เป็น primary auto increment
dte เป็น unique
Tag : Ms Access, MySQL, Ms SQL Server 2012, Oracle, PostgreSQL
insert into test
SELECT
null,
CONCAT(
RIGHT(YEAR(NOW())+543, 2),
RIGHT(d + 10001,4)
)
FROM (
SELECT 0 as d
UNION ALL
SELECT MAX( RIGHT( dte, 4) ) FROM test WHERE LEFT(dte, 2)=RIGHT(YEAR(NOW())+543,2)
) AS TMP
order by d DESC LIMIT 1
ตาราง test
id type int unsigned autoincrement PK
dte varchar 6 unique