 |
|
TIP การ insert ตาราง ที่มี index เป็นตัวอักษรผสมตัวเลข ใน sql statement แบบ คำสั่งเดียว |
|
 |
|
|
 |
 |
|
จากที่อ่านหลายๆ กระทู้ เห็นมีปัญหากับการ 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
|
ประวัติการแก้ไข 2014-07-20 09:33:09 2014-07-20 09:35:56
|
 |
 |
 |
 |
Date :
2014-07-19 12:14:17 |
By :
Chaidhanan |
View :
5144 |
Reply :
5 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จัดไปครับ
|
 |
 |
 |
 |
Date :
2014-07-20 09:21:52 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
น่าจะแถม SQL มาด้วยนะครับ จะได้เห็นภาพมากกว่าคำสั่งของ SQL
|
 |
 |
 |
 |
Date :
2014-07-29 20:22:55 |
By :
deawx |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
พี่ Chaidhanan เขียนเป็นบทความเลยครับ จะได้หาง่าย ๆ อยู่กับกระทู้ ยิ่ง พูดคุยทั่วไป น้อง ๆ หลายคนอาจเข้าไม่ถึง ไม่สนใจมาหาครับ  
|
 |
 |
 |
 |
Date :
2014-08-15 09:08:15 |
By :
apisitp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าผมจะทำเลขรันอัตโนมัติ ตามปีพ.ศ คือ ขึ้นพ.ศ. ใหม่ เลขก็เริ่มจาก 0001 เช่น 58-0001 / 59-0001
ผมต้องทำยังไงหรอครับ ดูแล้วยังไม่ค่อยเข้าใจ
ขอบคุณครับ
|
 |
 |
 |
 |
Date :
2015-10-01 10:24:28 |
By :
นท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
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
|
ประวัติการแก้ไข 2015-10-02 08:57:38
 |
 |
 |
 |
Date :
2015-10-02 08:55:04 |
By :
NewbiePHP |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|