ต้องการสร้าง 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;
?>


Pontiac 30-10-2010 00:10:05

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

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


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


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

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

 



Ninenik 30-10-2010
 ความคิดเห็นที่ 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);
}
?>

 



pontiac 30-10-2010 17:00






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