Reputation: 2871
I make an unique id, which contain of CURRENT_DATE
and character like :
SELECT CONCAT(DATE_FORMAT(CURRENT_DATE,'%Y%m%d'),'Q',
LPAD(MAX(RIGHT(idreport,3))+1,3,'0'))
FROM record.report
result :
20140723Q001
I want every day it start from 001
. So, if the query above is correct I would get result like 20140724Q001
today. But I get a wrong result 20140724Q002
.
How to reset 3 digit behind the id if the day change?
complete syntax :
$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];
}
Upvotes: 1
Views: 212
Reputation: 1384
Although we can have a more optimized solution, this should do your job-
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;
Incase any query, please let me know.
Upvotes: 1