จะหาค่า id ลำดับต่อไปทำยังไง ?

Written on May 7, 2008 – 2:28 pm | by admin |

เหอๆๆ ชื่อหัวข้อ งงๆ ป่าว ผมอ่านผมก็ยัง งงๆ เลยครับ แต่เอาเป็นว่าคุณๆที่เคยเขียนโปรแกรมที่ต้องมีการนำเอาค่า id ของตารางไปใช้งานต่อไป และค่า id ที่จะเอาไปนั้นเองในดาต้าเบสก็ดันเป็นข้อมูลแบบ ‘Auto_increment’ หรือ รันขึ้นไปเรื่อยๆอัตโนมัติอีกหล่ะทำไง

นี่ไงๆ เขียนแบบนี้เลย
$result = mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
$row = mysql_fetch_assoc($result);
echo $row[’now_id’]+1;

หรือ
$result = mysql_query(”SELECT MAX(order_id)+1 AS next_id FROM orders “);
$row = mysql_fetch_assoc($result);
echo $row[’next_id’];

ก็ได้ค่าของ id ลำดับต่อไปแล้ว

ง่ายดีไหมครับ…….

แต่……มันไม่ใช่แค่นั้นนะสิ

สมมุติละกันว่า ตอนนี้ มีแถวอยู่แบบนี้ โดยที่ข้อมูลยังครบถ้วน id เป็นฟิลล์แบบ Auto_increment

+—-+————+————+
| id | txt | date |
+—-+————+————+
| 1 | wqwmo | 0211041039 |
| 2 | mote | 0210120016 |
| 3 | phpbuilder | 0211161642 |
| 4 | txt1 | 0211181109 |
| 5 | txt2 | 0211181109 |
+—-+————+————+

หากเราใช้คำสั่ง  mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
ค่า now_id จะต้องเท่ากับ 5 ใช่หรือไม่ ?

ถูกต้องนะครับ…

แต่หากว่าเกิดเราลบ id ที่ 5 ไปหล่ะ มันก็จะเหลือข้อมูลแบบนี้
+—-+————+————+
| id | txt | date |
+—-+————+————+
| 1 | wqwmo | 0211041039 |
| 2 | mote | 0210120016 |
| 3 | phpbuilder | 0211161642 |
| 4 | txt1 | 0211181109 |
+—-+————+————+

และเมื่อเราใช้คำสั่ง mysql_query(”SELECT MAX(order_id) AS now_id FROM orders “);
ค่า now_id จะต้องเท่ากับ 4 ใช่หรือไม่ ?

ก็ถูกต้องนะครับ…

แต่จริงๆแล้ว id ที่จะถูกใช้งานเมื่อถูก insert ครั้งต่อไปมันคือ 6 ครับ

อ่าว เวร แล้วสิ งี้ทำไงดี

บางคนอาจจะใช้วิธี insert ข้อมูลเข้าไปก่อน แล้วค่อยใช้วิธี query ออกมาอีกครั้งหนึ่ง เพ่ือเอาค่า id ล่าสุดไปใช้งานต่อไป

สำหรับคนที่เคยทำแล้วอาจจะบอก ง่ายจริงๆ แต่หลายๆคนที่ไม่เคยใช้งาน ก็ลองเอาไปใช้งานนะ

$q = mysql_query(”show table status from DATABASE_NAME like ‘TABLE_NAME’ “) or die(mysql_error());
echo mysql_result($q, 0, ‘Auto_increment’);

รับรองคราวนี้ได้ค่า id ต่อไปของข้อมูลแบบ Auto_increment ที่ถูกต้องและแน่นอน

วิธีนี้เหมาะกับการต้อวงการทราบค่า id ต่อไป เหมือนที่แสดงใน phpmyadmin ที่บอกว่า
ต่อไป Autoindex        4
ประมาณนี้ครับ

  1. 4 Responses to “จะหาค่า id ลำดับต่อไปทำยังไง ?”

  2. By few on May 15, 2008 | Reply

    เอ.. แล้วถ้าใช้ function mysql_insert_id ล่ะครับ มีผลต่างกันยังไงป่ะครับ

  3. By admin on May 15, 2008 | Reply

    mysql_insert_id มันใช้ตอนเรา insert ข้อมูล
    แต่ที่พูดถึง คือการเอาค่ามาก่อนที่มันจะ insert หน่ะ
    คนละแบบกัน และก็ต้องดูว่าเราดึงมาเพื่ออะไร

  4. By few on May 20, 2008 | Reply

    อ่อครับ เออ เนอะ ผมเข้าใจผิดๆ แหะๆ T-T

  5. By ilumin on May 20, 2008 | Reply

    แล้วถ้าใช้ mysql_insert_id จะมีปัญหารึปล่าวครับถ้าหากว่ามีการ query ติดๆกันมากๆในเวลาที่ใกล้เคียงกัน

You must be logged in to post a comment.

Editor's Talk!

สวัสดีคนที่หลงเดินทางเข้ามายัง Blog ของผม อาจจะด้วยความไม่ตั้งใจ หรือ ตั้งใจเข้ามาก็ตาม ก่อนอื่นผมก็ต้องขอออกตัวก่อนว่า Blog ของผมมันจะมีสาระบ้าง หรือ ไม่มีสาระเลย ก็แล้วแต่อารมณ์ช่วงไหนอยากเขียนอะไร อย่าเหมาว่า Blog ผมจะต้องมีแต่ความรู้เหมือน Blog ของคนอื่นๆ นะครับ
สำหรับ Blog นี้ ผมสามารถใช้คำพูดใดๆก็ได้ตามที่ผมเห็นสมควร เพราะมันคือ Blog ของกู(ผม) บางครั้งผมเขียนไปกระทบใครก็ขออภัยไว้ ณ. ที่นี้ด้วย ก็ไม่มีอะไรมากครับ ขอบคุณที่เข้ามาอ่าน Blog ของผมนะครับ

นายแม็ค

ค้นหา :