 |
อยากให้เก็บ ID ให้เป็นอัติโนมัติค่ะ (ID มีทั้งตัวเลขและตัวอักษร) |
|
 |
|
|
 |
 |
|
รหัสอักษร 2 ตัวแรกฟิกซ์รึเปล่าครับ?
|
 |
 |
 |
 |
Date :
2013-11-24 18:58:00 |
By :
itpcc |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้วต้อง fix เป็น CS ตลอด หรือ อนาคตมันจะต้องเปลี่ยนเป็น CZ จนกระโดด เป็น DA แบบทะเบียนรถหรือเปล่าครับ...
|
 |
 |
 |
 |
Date :
2013-11-25 08:35:01 |
By :
apisitp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
select IFNULL(CONCAT('CS',case when (select max(CONVERT(replace(id,'CS',''), SIGNED INTEGER))+1 from tablename) < 10 then CONCAT('00',(select max(CONVERT(replace(id,'CS',''), SIGNED INTEGER))+1 from tablename)) when (select max(CONVERT(replace(id,'CS',''), SIGNED INTEGER))+1 from tablename) < 100 then CONCAT('0',(select max(CONVERT(replace(id,'CS',''), SIGNED INTEGER))+1 from tablename)) else (select max(CONVERT(replace(id,'CS',''), SIGNED INTEGER))+1 from tablename) end),CONCAT('CS','001') )
|
 |
 |
 |
 |
Date :
2013-11-25 09:38:36 |
By :
เรก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่เอาเอาคอมเม้นด้านล่างดีกว่า  
DSSDAD001
แยกให้ออกว่า
- DSSDAD00 มันคือ TEXT จะเห็นได้ว่ามันตายตัวและมี 8 ตำแหน่ง
- 1 ตัวสุดท้ายคือ int
ฟังชั่นที่เรียกใช้งาน
- preg_replace
- substr ไว้ตัด text ออกจากเลข
ทดสอบ
<?
$TEST= "SXSADSA001";
$text=substr($TEST,0,9);
$i = 0;
while ($i<150) {
$TEST=preg_replace('/[^\d]/','', $TEST);
$XX+=$TEST;
echo $text,$XX."<BR>";
$i++; }
?>
-ข้อเสีย เมื่อ DSSDAD009 แล้วตัวต่อไปจะเป็น DSSDAD0010 มิไช่ DSSDAD010 ในอนาคตหากมีการ order by ส่วนนี้อาจจะมีปัญหาได้ วิธีแก้มีแต่จะยาวหน่อย
|
ประวัติการแก้ไข 2013-11-25 18:24:23
 |
 |
 |
 |
Date :
2013-11-25 18:14:05 |
By :
meannerss |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอาใหม่ดีกว่ามันซับซ้อนเกินไปใช้ substr อย่างเดียวพอ.
<?
$TEST="SXSADSA001";
$text1=substr($TEST,0,9);
$text2=substr($TEST,10,999);
$i = 0;
while ($i<150) {
$xx=$text+1;
$result+=$xx;
echo $text1,$result."<BR>";
$i++; }
?>
- ข้อดีได้จำนวน id ที่ไม่จำกัด
-ข้อเสีย เมื่อ DSSDAD009 แล้วตัวต่อไปจะเป็น DSSDAD0010 มิไช่ DSSDAD010 ในอนาคตหากมีการ order by ส่วนนี้อาจจะมีปัญหาได้
วิธีแก้ข้อเสียมีแต่ไม่ทำเพราะ ถ้าืำทำจะทำให้เกิดการจำกัด limit ของ id ในระบบ
- ถ้า DSSDAD001 จะบรรจุไอดีได้แค่ 999 เท่าตัวนั้น
- ถ้า DSSDAD0001 จะบรรจุไอดีได้แค่ 9999 เท่าตัวนั้น
|
 |
 |
 |
 |
Date :
2013-11-25 18:23:46 |
By :
meannerss |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โดยส่วนตัวขอแนะนำว่าใช้ Primary Key เป็น Int+Auto Increment ดีกว่าครับ ส่วน รหัส หรือ ID Auto run ที่ทำเองนั้น ให้เป็น Candidate Key ก็ได้ นะ เพราะเอาไว้ตอนค้นหาข้อมูล หนะ
ความคิดส่วนตัวครับ
|
 |
 |
 |
 |
Date :
2013-11-25 18:26:06 |
By :
geidtiphong |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ควรจะมีฟิลด์ที่เป็น Auto Id อีกฟิลด์ครับ
จากนั้นทุกครั้งที่ INSERT ก็ใช้ mysql_insert_id(); รับค่าที่เพิ่งบันทึกไป
แล้วก็ไปหาค่า MAX ของรหัสลูกค้าที่ตัดตัวอักษรออกไปแล้ว (ถ้ามีตัวอักษรค่าอาจเพี้ยน)
เมื่อได้ค่า MAX ก็เอามา +1
จากนั้นก็นำค่าใหม่ไปอัพเดตให้ mysql_insert_id(); ที่ได้มานั่นเอง
|
 |
 |
 |
 |
Date :
2013-11-25 19:00:29 |
By :
{Cyberman} |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ๋อๆ พอเข้าใจระบบแล้วค่ะ เด๋วจะลองทำดู ถ้ายังไงทำไม่ได้จะแวะมาถามใหม่นะคะ   
|
 |
 |
 |
 |
Date :
2013-11-25 19:13:37 |
By :
yoyo |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอขอบคุณมากมายนะคะ (จะทำได้มั้ยน้อออ)
|
 |
 |
 |
 |
Date :
2013-11-25 19:14:28 |
By :
yoyo |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|