ต้องการสร้าง php autonumber ที่สามารถ reuse ได้

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ต้องการสร้าง php autonumber ที่สามารถ reuse ได้

ต้องการสร้าง php autonumber ที่สามารถ reuse ได้
อย่างที่ทราบกันดีว่า  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;
?>




Pontiac 61.90.9.xxx 30-10-2010 00:10:05

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ถ้าเข้าใจเกี่ยวกับการ ใฃ้งาน php มากๆ ก็จะสามารถทำได้ จะให้แนวทาง ลองไปศึกษาเพิ่มเติมดู
มี 2 วิธี อย่างง่าย เท่าที่คิดออก ที่สามารถ นำค่า autoincrement มา reuse
1. สร้างตารางเก็บ id ที่ถูก ลบ แล้วเรียกใช้งานเมื่อมีการเพิ่มข้อมูลใหม่
2. สร้างตัวแปร array เปรียบเทียบ ค่าแตกต่าง แล้วนำค่า autoincrement ที่ถูกลบ
แนวทางตัวอย่าง วิธีที่ 2
 

<?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 สำหรับเพิ่มในฐานข้อมูล
?>

 



Ninenik 124.120.16.xxx 30-10-2010
 ความคิดเห็นที่ 2

 ขอคุณมากเลยครับ  คุณ Ninenik สำหรับการเสียสละเวลาวันหยุดมาแนะนำ ผมลองปรับแต่งให้ใช้กับของจริงได้ประมาณนี้ครับ

<?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);
}
?>

 



pontiac 58.8.156.xxx 30-10-2010 17:00






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ