ง่าย ๆ php auto id การสร้างเลขที่อัตโนมัติก่อนเพิ่มข้อมูลใหม่

ง่าย ๆ php auto id การสร้างเลขที่อัตโนมัติก่อนเพิ่มข้อมูลใหม่

PHP CODE FATHER โปรแกรมช่วยสร้างโค้ด โปรเจ็ค PHP+MySQL+Boostrap ใช้งานง่าย ๆ



ปัญหาของผู้เริ่มต้นศึกษาการเขียนหรือการพัฒนาเว็บไซต์ด้วย ภาษา php อีกอย่างนึง
ที่ยังไง ๆ ก็ต้องได้พบ ได้เจออย่างหลีกเลี่ยงไม่ได้ ตัวผมเองก็เช่นกัน กว่าจะผ่านจุดนั้นมาได้
ก็ต้องใช้ความพยายามในการค้นหา และทดลองทำตามตัวอย่างที่รุ่นพี่ ๆ โปรแกรมเมอร์เขาได้
บอกไว้

ซึ่งหากเราเข้าใจระบบ หรือกระบวนการทำงานของมันแล้ว มันก็ไม่ใช่เรื่องใหญ่ หรือ เรื่องยากอะไรเลย ขออธิบายแบบตัวอักษรเช่นเคย เพื่อจะได้จินตนาการไปพร้อม ๆ กันครับ

เพื่อไม่เป็นการเสียเวลา เข้าเรื่องเลยละกันนะ...

บางคน (โดยเฉพาะมือใหม่) ที่ยังออกแบบดาต้าเบส หรือ ฐานข้อมูลไม่ค่อยเก่งนั้น
ส่วนมากจะสร้างรหัส (ไพมารี่คีย์) ให้เป็นแบบ auto_number โดย เลือกประเภทของฟิล์เป็นแบบตัวเลข INT และกำหนดค่าเป็น auto_increment เพื่อให้ฟิลด์หลักนั้น เป็นแบบ autoid นั่นเอง

ซึ่งมันก็ไม่ได้ผิดอะไร เวลาเพิ่มข้อมูลก็ไม่ต้องไปยุ่งยากกำหนดค่าให้มัน เช่น
Insert into std Set std_name='code father'
จากโค้ดจะสังเกตุได้ว่า ไม่ได้มีการกำหนดค่าหรืออ้างถึง std_id แต่อย่างใด เนื่องจากฟิลด์ std_id นั้น ได้กำหนดค่าให้เป็นแบบ auto number แล้ว เวลาเพิ่มข้อมูลใหม่ จึงไม่จำเป็นต้องกำหนดค่า หรือ เอามาเกี่ยวข้องแต่อย่างใด ก็สามารถเพิ่มข้อมูลใหม่เข้าสู่ database ได้เช่นกัน

แต่ปัญหาที่ตามมาก็คือ ในฐานข้อมูล ค่าในฟิลด์ std_id นั้นจะเป็นค่าของตัวเลขจำนวนเต็ม (INT)
ซึ่งเวลาแสดงผลให้ผู้ใช้งานดูจะไม่สวยงามเท่าใดนัก ทำให้บางครั้งต้องใช้ฟังก์ชั้นสำหรับจัดการรูปแบบให้กับตัวเลขนั้นอีกที เช่น

1   ต้องการแสดงผลเป็น 00001
12 ต้องการแสดงผลเป็น 00012

ฟังก์ชั่นที่ใช้เปลี่ยนค่าตัวเลขให้เป็นรูปแบบตามที่ต้องการข้างบนก็ ตามนี้ครับ

sprintf("%05d",$std_id) // หากต้องการ 3 ตำแหน่งก็เปลี่ยน จากเลข 5 เป็นเลขที่ต้องการได้เลย

************ จบแบบเบสิค **************

มาต่อกันกับการสร้างเลขที่ auto id แบบที่ผมตั้งใจจะนำเสนอกันดีกว่า
มันก็คือการไปเลือกเอาค่า id ที่มากที่สุดที่อยู่ในฐานข้อมูลมา จากนั้นก็บวกเพิ่มเพื่อสร้างเป็นรหัสใหม่ โดยมีโค้ดง่าย ๆ ตามนี้ครับ

$new_id =mysql_result(mysql_query("Select Max(std_id)+1 as MaxID from  std"),0,"MaxID");//เลือกเอาค่า id ที่มากที่สุดในฐานข้อมูลและบวก 1 เข้าไปด้วยเลย
            if($new_id==''){ // ถ้าได้เป็นค่าว่าง หรือ null ก็แสดงว่ายังไม่มีข้อมูลในฐานข้อมูล
                $std_id="00001";
            }else{
                $std_id=sprintf("%05d",$new_id);//ถ้าไม่ใช่ค่าว่าง
            }

หลังจากนี้ ก็เอาค่าตัวแปร std_id ไปใช้งานได้แล้วครับ จากโค้ดจะเห็นว่า ไม่ได้มีอะไรยุ่งยากอะไรเลย สามารถเอาไปใช้งานได้จริง (ผมเองก็ใช้แบบนี้อยู่ประจำ) ที่ต้องเปลี่ยนก็มีเพียงแค่ 2 จุดคือ ที่ทำสีน้ำเงินไว้ แค่นั้นเอง

*** ตัวอย่างโค้ดข้างบนนี้ สำหรับ กรณีที่ฟิลด์ std_id เก็บไว้แบบตัวเลข เช่น 1, 2 หรือ 00001, 00002 ฯลฯ เป็นต้น เท่านั้นนะครับ ใช้ไม่ได้สำหรับฟิล์ดที่เก็บแบบตัวเลขผสมกับตัวอักษร เช่น S0001, ID0001 ฯลฯ เป็นต้น

******************************************
คำถามต่อมาก็คือ แล้วถ้าฟิลด์ std_id เก็บค่าแบบ ตัวเลขผสมตัวอักษรหล่ะ จะทำไงดี
ปัญหานี้ก็ไม่ใช่เรื่องใหญ่ครับ เราก็ต้องเพิ่มคำสั่งเล็ก ๆ น้อย ๆ อีก ดังนี้

สมมุติว่าฟิลด์ std_id มีข้อมูลอยู่ 10 รายการ คือ S0001 , S0002 ...........S0010
เราก็เพิ่มคำสั่งตัดคำ คือ ตัดตัวอักษรออกก่อน ในที่นี้คือ ตัว S นั่นเอง

$new_id =mysql_result(mysql_query("Select Max(substr(std_id,-4))+1 as MaxID from  std"),0,"MaxID");//เลือกเอาค่า id ที่มากที่สุดในฐานข้อมูลและบวก 1 เข้าไปด้วยเลย
            if($new_id==''){ // ถ้าได้เป็นค่าว่าง หรือ null ก็แสดงว่ายังไม่มีข้อมูลในฐานข้อมูล
                $std_id="S0001";
            }else{
                $std_id="S".sprintf("%04d",$new_id);//ถ้าไม่ใช่ค่าว่าง
            }

จะสังเกตุว่าส่วนที่เพิ่มเข้ามาก็คือ คำสั่ง substr(std_id,-4) ที่เดียวเท่านั้นเอง

เป็นอย่างไรกันบ้างครับ พอที่จะเห็นภาพไหมว่าที่จริงแล้วมันไม่ได้มีอะไรเลยจริง ๆ
ง่ายนิดเดียวเอง ใคร ๆ ก็ทำได้...

ย้อนกลับ กลับหน้าแรก