Mysql:如果每天更改,重置ID从1开始

时间:2014-07-24 02:08:06

标签: php mysql

我创建了一个唯一的ID,其中包含CURRENT_DATE和字符:

SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',
      LPAD(MAX(RIGHT(idreport,3))+1,3,'0')) 
FROM record.report

结果:

20140723Q001

我希望每天都从001开始。所以,如果上面的查询是正确的,我今天会得到像20140724Q001这样的结果。但是我得到了错误的结果20140724Q002。 如果日期改变,如何重置ID后面的3位数?


完整语法:

$sql="SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',LPAD(MAX(RIGHT(idreport,3))+1,3,'0')) 
                FROM record.report";
  $res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );  
  $dat1=mysql_fetch_array($res, MYSQL_NUM);
  if($dat1 == 0){ 
        $sql = "SELECT DATE_FORMAT(CURRENT_DATE,'%Y%m%d')";
        $res1=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );
        $dat2=mysql_fetch_array($res1, MYSQL_NUM);
        // first number
        $RegNum = $dat2[0]."Q001";
        } else {
                $RegNum = $dat1[0];
                }

1 个答案:

答案 0 :(得分:1)

虽然我们可以有一个更优化的解决方案,但这应该可以胜任你的工作 -

SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',
      LPAD(MAX(RIGHT(CASE WHEN LEFT(idreport,8)=DATE_FORMAT(CURRENT_DATE,'%Y%m%d') THEN idreport ELSE '000' END,3))+1,3,'0'))
FROM record.report;

如果有任何疑问,请告知我们。