这个你要分两部来做。
第一判断是否要清零。
select * from tbl where id like '字母+当前日期%'
看一下有没有取道纪录。没有就代表得从0开始。第二要取得今天的最大值。
这个就要看你的这个ID的设计。
假设
字母+当前日期+数字
1位 YYYYMMDD
就像这样
A2004082700001
A2004082700002
select max(id) from tbl where id like '字母+当前日期%'
之后将取到的值用PHP文字函数处理一下,取到最后的数字然后增长1如果你最后的数字不定长
A200408271
A200408272
.
.
A2004082715这个就要用到数据库自己的文字处理函数,各个数据库函数不一样
比如oracleselect max(substr(id,10)) from tbl where id like '字母+当前日期%'
这样就能直接取到最大的数字,然后增长1
第一判断是否要清零。
select * from tbl where id like '字母+当前日期%'
看一下有没有取道纪录。没有就代表得从0开始。第二要取得今天的最大值。
这个就要看你的这个ID的设计。
假设
字母+当前日期+数字
1位 YYYYMMDD
就像这样
A2004082700001
A2004082700002
select max(id) from tbl where id like '字母+当前日期%'
之后将取到的值用PHP文字函数处理一下,取到最后的数字然后增长1如果你最后的数字不定长
A200408271
A200408272
.
.
A2004082715这个就要用到数据库自己的文字处理函数,各个数据库函数不一样
比如oracleselect max(substr(id,10)) from tbl where id like '字母+当前日期%'
这样就能直接取到最大的数字,然后增长1
因为编号里面有字母,那么用max()是是否是按ASNI码比较的呢?还是按其他的方法?
编号格式:如rc20040828001
$con =mysql_connect("localhost","root","" ) or die("无法连接到数据库!");
mysql_select_db("d_tire",$con)or die("无法选择数据库!");
$query="select max(no) from test ";
$result = mysql_query($query) or die("无法执行SQL");
while($r=mysql_fetch_array($result))
$str=$r[no];
$cur_date=date(Ymd);
$incr_id=1;$sub_str=substr($str,2,8);
if($cur_date > $str){
$str=$cur_date;
$incr_id=1;
}
else
++$incr_id;
//$str_id=rc+$str+$incr_id;
$str_id= rc."".$str."".$incr_id;
echo "$str_id";
我怎么样让$str_id输出的值中$incr_id前的0不被去掉?
当我输出的时候前面的0就被自动去掉了
==>
printf("%0Nd",$str_id); //其中N为你需要的宽度,比如要输出001则N=3另外用str_pad函数也可以
<?php
$con =mysql_connect("localhost","root","" ) or die("无法连接到数据库!");
mysql_select_db("d_tire",$con)or die("无法选择数据库!");
$query="select max(no) from test ";
$result = mysql_query($query,$con) or die("无法执行SQL");
while($r=mysql_fetch_array($result))
$str_max=$r["no"];
echo "$str_max";
?>
$result = mysql_query($query,$con) or die("无法执行SQL");
while($r=mysql_fetch_array($result))
$str_max=$r["no"]; //这里什么也不会得到,因为查询后并无no列
echo "$str_max";
$query="select max(no) from test ";
===>
$query="select max(no) as no from test ";
那max 取的是什么呢?
它不是把最大的no取出吗?