BN เป็น prefix ไม่ต้องเก็บในตารางครับ
ส่วน id เป็น column int ที่ auto_increment
โดยที่ปี ค.ศ. และลำดับที่ จะเก็บไว้ใน id ที่ auto_increment นี้ครับ
======================================================
//การเพิ่ม order
//ตรวจว่ามี order ของปีนี้แล้วหรือยัง
$r = mysql_query('SELECT count(*) FROM orders WHERE order_datetime=Year(Now())');
//ถ้ายังไม่มีให้กำหนด auto_increment ของ id ขึ้นใหม่
//ถ้าปีนี้เป็นปี 2009 ก็จะกำหนดเป็น 2009001
if (mysql_result($r,0)==0){
$y = (date('Y')*1000)+1; //ถ้าประมาณการว่าจะมี order ไม่เกิน 1000 ใบต่อปี
mysql_query("ALTER TABLE orders AUTO_INCREMENT = $y");
}
จากนั้นค่อยเพิ่ม order ตามปกติโดยจะได้ id แรกของปี 2009 เป็น 2009001
======================================================
//การแสดงผล order
//query แยกข้อมูล ปีและลำดับที่
$r = mysql_query('SELECT FLOOR(id/1000)+543 AS year_id, LPAD((id-FLOOR(id/1000)*1000),3,'0') AS num_id FROM orders');
while ($row=mysql_fetch_assoc($r)){
echo '<br/>','BN',$row['num_id'].'/'.$row['year_id'];
}
======================================================