function getprimary($conn,$table_name,$field_name,$int,$type){
     $sql = "select max($field_name) from ".$table_name;
 $res =mysql_query($sql,$conn);
 $row = mysql_fetch_row($res);
 $str = $row[0];
 $arr = stristr($str,'0');
                 $temp = $int+$arr+1;
         $newid=substr_replace($temp,$type,0,1);
 return $newid;
}给你个函数参考!getprimary($conn,mytable,id,100000,E);这样调用的意思是mytable表的主健字段自动以E00001,E00002,E00003......增加,不知道是不是你要的!

解决方案 »

  1.   

    刚才我发现mysql里面插入 200810080001 居然出错了 数据库里面 int型最大是2147483647
      

  2.   

    <?php
    include_once "inc/class/db.php";
    $db = new Db();function getPrimary($db,$table_name,$field_name){ 
        $sql = "select max($field_name) from ".$table_name; 
    $str = $db->fetchOne($sql);
    if(!isset($str))
    {
    $str = date("Ymd");
    $newid = $str."0001";
    }
    else
    $newid = $str+1;
    return $newid; 
    }$id = getPrimary($db,"order_1","id");
    $sql = "INSERT INTO order_1 VALUES('$id',NOW())";
    $stmt = $db->query($sql);
    if($stmt)
    {
    echo "操作成功";
    }
    ?>按照日期递增的订单号根据dzxccsu 的改了一下DROP TABLE IF EXISTS `order_1`;
    CREATE TABLE `order_1` (
      `id` varchar(16) NOT NULL,
      `create_time` datetime NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;订单表
      

  3.   

    同时并发两个用户的情况下,其取得的max($field_name)是一致的,这个方案是无法保证不发生重复的。一般的系统都是通过设置自增长id的起点,或者是格式化自增长id来实现的。
    方法1:create table tbl_test (id bigint not null auto_increment, value varchar(20) not null, primary key (id));
    alter table tbl_test auto_increment = 100000000;方法2:create table tbl_test (id bigint not null auto_increment, value varchar(20) not null, primary key (id));
    mysql_query($conn, "insert into tbl_test (value) values ('foo')");
    $order_id = "1" . sprintf("%08d", mysql_insert_id($conn));
      

  4.   

    谢谢楼上的指出错误及解决的方案,那么如果我想根据自己的喜好来设置primary key,比如我想把定单号定为P0001,P0002....这样的方式。有没有办法解决并发问题呢?
      

  5.   

     $dingdanhao = date("Y-m-d");
    $dingdanhao = str_replace("-","",$dingdanhao);
    $dingdanhao .= rand(0,1000);
    我这么写可以么
      

  6.   

    Myisam表的话可以用这样的方法
    prefix作为varchar类型,主键
    id作为int类型,主键,并且自增
    注意,两个字段都是主键
    订单号就会像以下那样
    prefix id
    A      1
    A      2
    ...
    B      1
    B      2
      

  7.   

    Myisam表的话可以用这样的方法
    prefix作为varchar类型,主键
    id作为int类型,主键,并且自增
    注意,两个字段都是主键
    订单号就会像以下那样
    prefix id
    A      1
    A      2
    ...
    B      1
    B      2