PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

ต้องการสร้าง 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 IP: 61.90.9.xxx วันที่: 30-10-2010 เวลา: 00:10:05

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

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


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


  • ( หรือ สามารถทำการ สมัครสมาชิก และล็อกอิน ด้วย ปุ่ม Log in with Facebook ด้านล่าง )
 ความคิดเห็นที่ 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 IP: 58.8.156.xxx วันที่: 30-10-2010 เวลา: 17:00:17
 ความคิดเห็นที่ 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 IP: 124.120.16.xxx วันที่: 30-10-2010