Php Mysql:如果日期发生变化,则重置id从1开始

Php Mysql:如果日期发生变化,则重置id从1开始,php,mysql,Php,Mysql,我制作了一个唯一的id,其中包含当前\u日期和如下字符: 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,其中包含
当前\u日期
和如下字符:

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];
                }
$sql=“选择CONCAT(日期格式(当前日期,%Y%m%d'),'Q',LPAD(最大值(右(idreport,3))+1,3,'0'))
“从记录到报告”;
$res=mysql_query($sql)或_doError(_ERROR30.'('.htmlspecialchars($sql.'):'.mysql_error());
$dat1=mysql\u fetch\u数组($res,mysql\u NUM);
如果($dat1==0){
$sql=“选择日期格式(当前日期,%Y%m%d”)”;
$res1=mysql_query($sql)或_doError(_ERROR30.'('.htmlspecialchars($sql)。'):'.mysql_error());
$dat2=mysql\u fetch\u数组($res1,mysql\u NUM);
//第一个数字
$RegNum=$dat2[0]“Q001”;
}否则{
$RegNum=$dat1[0];
}

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

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;
如有任何疑问,请告诉我