ต้องการสร้าง php autonumber ที่สามารถ reuse ได้
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ต้องการสร้าง php autonumber ที่สามารถ reuse ได้
ต้องการสร้าง php autonumber ที่สามารถ reuse ได้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | อย่างที่ทราบกันดีว่า database ที่มี field เป็น auto increment ไม่สามารถทำการ reused number ได้จากการ Delete ไป เช่น 1,2,3,4,5 พอ delete 3 ออก แล้ว insert ข้อมูลเข้าไปเพิ่มอีก 1 จะกลาย 1,2,4,5,6 ซึ่งไม่มีทางกลับไปใช้ 3 ได้เลย ดังนั้นพอจะมีทางมั้ยครับ ที่จะให้ php ทำการ Check ใน table ที่เป็น field testID ว่ามีตัวเลขไหนถูกข้ามไป (จากการ Delete ) แล้วนำมาใช้ใหม่ในครั้งต่อไป (ตาม Code อันนี้ไม่ได้กำหนดใน database ว่า Field testID เป็น Auto_increment แต่ทำการ+เพิ่มก่อน Insert) <?php $connectDB = mysql_connect( "localhost" , "root" , "12345" ) or die ( "Error Connect to Database" ); mysql_select_db( "test" , $connectDB ); // Search By ID $cmd = "SELECT max(testID) from test_table" ; $result = mysql_query( $cmd , $connectDB ) or die ( "Error Query [" . $cmd . "]" ); $total_max = mysql_result( $result ,0); $nums = ++ $total_max ; $id = str_pad ( $nums ,4, "0" ,STR_PAD_LEFT); echo $id ; ?> |

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
ถ้าเข้าใจเกี่ยวกับการ ใฃ้งาน php มากๆ ก็จะสามารถทำได้ จะให้แนวทาง ลองไปศึกษาเพิ่มเติมดู
มี 2 วิธี อย่างง่าย เท่าที่คิดออก ที่สามารถ นำค่า autoincrement มา reuse
1. สร้างตารางเก็บ id ที่ถูก ลบ แล้วเรียกใช้งานเมื่อมีการเพิ่มข้อมูลใหม่
2. สร้างตัวแปร array เปรียบเทียบ ค่าแตกต่าง แล้วนำค่า autoincrement ที่ถูกลบ
แนวทางตัวอย่าง วิธีที่ 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $autoVar1 = array (); $autoVar2 = array (); $q = "SELECT id FROM tbl_autoincrement WHERE 1 ORDER BY id " ; $qr =mysql_query( $q ); $i =0; while ( $rs =mysql_fetch_array( $qr )){ $i ++; $autoVar1 [ $rs [ 'id' ]]= $rs [ 'id' ]; $autoVar2 [ $i ]= $i ; } // เปรียบเทียบ array หาค่าที่ถูกลบ ถ้าไม่มี ให้เป็น null $nextID =( array_shift ( array_diff_key ( $autoVar2 , $autoVar1 ))!= "" )? array_shift ( array_diff_key ( $autoVar2 , $autoVar1 )) :null; echo $nextID ; // ค่า id autoincrement สำหรับเพิ่มในฐานข้อมูล ?> |

ความคิดเห็นที่
2
ขอคุณมากเลยครับ คุณ Ninenik สำหรับการเสียสละเวลาวันหยุดมาแนะนำ ผมลองปรับแต่งให้ใช้กับของจริงได้ประมาณนี้ครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php $autoVar1 = array (); $autoVar2 = array (); $connectDB = mysql_connect( "localhost" , "root" , "12345" ) or die ( "Error Connect to Database" ); mysql_select_db( "configmaker" , $connectDB ); $q = "SELECT ID FROM test WHERE ID ORDER BY ID " ; $qr =mysql_query( $q , $connectDB ); $i =0; while ( $rs =mysql_fetch_array( $qr )){ $i ++; $autoVar1 [ $rs [ 'ID' ]]= $rs [ 'ID' ]; $autoVar2 [ $i ]= $i ; } // เปรียบเทียบ array หาค่าที่ถูกลบ ถ้าไม่มี ให้เป็น null $nextID =( array_shift ( array_diff_key ( $autoVar2 , $autoVar1 ))!= "" )? array_shift ( array_diff_key ( $autoVar2 , $autoVar1 )):null; if ( $nextID == "" ) { $q = "SELECT max(ID) from test" ; $result = mysql_query( $q , $connectDB ) or die ( "Error Query [" . $q . "]" ); $total_max = mysql_result( $result ,0); $nums = ++ $total_max ; $nextID = str_pad ( $nums ,4, "0" ,STR_PAD_LEFT); echo $nextID ; // ค่า id autoincrement สำหรับเพิ่มในฐานข้อมูลเมื่อไม่มีการลบ mysql_close( $connectDB ); } else { $nextID = str_pad ( $nextID ,4, "0" ,STR_PAD_LEFT); echo $nextID ; // ค่า id autoincrement สำหรับเพิ่มในฐานข้อมูลเมื่อมีการลบ mysql_close( $connectDB ); } ?> |

ขอบคุณทุกการสนับสนุน
![]()