ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้
ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้


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

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

ปัจจุบัน นักพัฒนาสามารถ ใช้ ChatGPT | Gemini | Claude | Perplexity | Deepseek ช่วยในการแก้ไขปัญหาต่างๆ ในการเขียนโปรแกรม หรือหาข้อมูลเพิ่มเติมได้ง่ายและสะดวก แนะนำให้ทุกคนใช้งานเพื่อพัฒนาศักยภาพของตัวเอง

ต้องการสร้าง 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 30-10-2010 00:10:05

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

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


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


    ( หรือ เข้าใช้งานผ่าน 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 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 30-10-2010 17:00






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