作者koizumisyou (不小的挑战)
看板PHP
标题[请益] 请问关於不重复编号
时间Tue Sep 4 21:04:45 2012
我的需求为用户端送出一个表单时
编号为 920904001,若重复,则取该栏位最大值+1
9为固定号码,2为西元年最後一码,0904为日期,001是流水编
为了不重复,参考网路作法
1、变数C预设值是当天的001
2、假设经比对 变数 total不等於0,也就是里头已经有该编号
3、那麽就取最大值+1
我的问题是
问题1:为什麽多人使用时还是会重复编号??
问题1-1:重复的编号我观察结果发现,重复的编号都是我自己输入资料编号的最大值,不是整个资料库的
问题2:整个网页重新整理以後就好了
我该如处理??以下是我的程式码
form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST">
<?php
$A = date("md") ;//变数A:9开头加上带零的月、日
$B = substr(date('Y'),3,1);//变数B:取西元年第3个字元後1码
$C = Sprintf("9$B$A%s",'001') ; //变数B前加9,变数A後加001
?>
<?php
mysql_select_db($database_AdvList, $AdvList);
$sql = mysql_query("SELECT * FROM advlist WHERE advID=$C ORDER BY advID DESC");//找栏位内是否已经有$C的编号
$total = mysql_num_rows($sql); //用mysql_num_rows将$sql查询笔数传至$total
$advlist = mysql_query("SELECT * FROM advlist ORDER BY advID DESC"); //由大到小列出ID栏位内的值
$Num = mysql_result($advlist,0,advID);
if($total==0){$C=$C;}//记得echo 後面要加;,$total=0代表没有该编号,不等於但表有
else{$C=$Num+1;}//不等於0的话,则$Num等於adblist里ID最大值
?>
新手发问请多指教~谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.100.98
1F:推 LPH66:如果时序是 查询1>查询2>存入1>存入2 这样就重覆了 09/04 21:06
2F:推 hom1130:Mysql本身就可以接字串,你要不要新增完取得自动编号 09/04 21:38
3F:→ hom1130:再去更新写那个特别的编号 09/04 21:39
4F:→ koizumisyou:感谢L回覆,知道问题在哪了,H大,这样就不会重复吗? 09/04 21:42
5F:→ koizumisyou:自动编号的话,我隔天要归零...这个我不会~Sorry 09/04 21:43
6F:→ chrisQQ:隔天要归零,就把流水号跟日期建 index 起来,让他自己算 09/05 01:48
7F:→ tyf99:直接 concat(日期,流水号) 就行了,流水号不用归零 09/05 02:34
8F:→ tyf99:你之後要查询,再group by date,一起减掉流水号最小值 09/05 02:35
9F:→ tyf99:最後再处理流水号overflow的问题就好了 09/05 02:36