我使用的是mysql,由于没有root用户权限,所以不能在数据库创建触发器,只能用PHP来生成流水号,规则如下:
流水号格式 日期+四位数字编号 如20100721+0001=201007210001
每天编号都是从0001开始计算
201007210001
201007210002
201007210003
.
.
.201007220001
201007220002
201007220003
.
.
.用PHP如何实现呢?

解决方案 »

  1.   

    拿txt/xml/sqlite/mysql 存 day  number然后获取的时候, 如果day不为今天, 则number重置, 再写入day为今天,否则number++
      

  2.   

    可能不是连续增加吧???搜索最后插入的流水号, $pid$today = date("Ymd");
    $pid = str_replace($today, '', $pid);//理论上会出错,如果流水号超出2010072220100722
    $pid = $today . str_pad($pid, 4, "0", STR_PAD_LEFT);//低于4位,在前面补0,并和时间串连起来 
    echo $pid;
      

  3.   

    $h = date('H', time());
    $i = date('i', time());
    $s = date('s', time());
    if(!isset($_COOKIE['d']) || $_COOKIE['d'] != date('d', time())){//如果不存在标识变量(今天的号)或者号不一样,那么从1开始
    setcookie('d', date('d'), time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
    setcookie('count', 1, time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
    $count = 1;
    }else{
    $count = $_COOKIE['count'];
    }
    $l = strlen($count);
    switch($l){
    case 1:
    $s = '000';
    break;
    case 2:
    $s = '00';
    break;
    case 3:
    $s = '0';
    break;
    default:
    break;
    }
    $s .= $count++;
    setcookie('count', $count, time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
    echo date('Ymd', time()).$s;
      

  4.   

    是要用PHP程序控制表的锁定吗?
      

  5.   

    先把201007220001分为两段去处理咯(20100722和0001),把这二个值先存放到一个文件里面去,每次都更新为最新的值。当要生成新的流水号时,把文件里的值取出来,前面的进行比较是为了看是否是今日的,如果是即从0001开始,否即把0001转为数值类型并加1再用str_pad转为4位并以0作为填充,问题就解决了吧!
      

  6.   

    lock table
    从数据库里取当天的最大值
    如果没有,格式化当天的时期加 “0001”
    如果没有,日期部分加上 数字部分加1.
    insert 记录.
    unlock table
      

  7.   

    上面的方法都挺好,如果这个数据库你完全没有权限,加不了字段来存最大的流水号,而这个流水号又不只是你一个人在用的时候,可以采用一个比较费时间的傻办法,就是用for语句
    这个流水号前面的日期一段如何获得,就不详述了,后面的用for语句,不足4位的补零
    然后判断每个这个号是否已经存在于数据库中,如果发现某个号不在数据库中,取出这个值,然后跳出循环
      

  8.   

    插入定单数据,不包括定单号。
    更新定单号为:(time()+mysql_insert_id())这样应该不会重复了。