Php 在InnoDB锁定表中每个月初重置的自动递增作业编号

Php 在InnoDB锁定表中每个月初重置的自动递增作业编号,php,mysql,Php,Mysql,两天前我提出了一个类似的问题,但尽管我接受了一个解决方案,但它涉及到使用MyISAM引擎。经过一些研究,我发现我需要在InnoDB引擎中实现以下结果,在InnoDB引擎中,我被告知需要使用我不太熟悉的表锁定 我想要得到的结果是一个唯一的工作编号类似这样:1311/5。第一个数字13显示年份,接下来的两个11月份和斜杠后的数字我希望它是一个自动递增的数字,每个月都会重置,并用作作业计数器 更新:由于我没有脑震荡问题,我为上述问题编写了以下代码: if($mar = $db->quer

两天前我提出了一个类似的问题,但尽管我接受了一个解决方案,但它涉及到使用MyISAM引擎。经过一些研究,我发现我需要在InnoDB引擎中实现以下结果,在InnoDB引擎中,我被告知需要使用我不太熟悉的表锁定

我想要得到的结果是一个唯一的工作编号类似这样:
1311/5
。第一个数字
13
显示年份,接下来的两个
11
月份和斜杠后的数字我希望它是一个自动递增的数字,每个月都会重置,并用作作业计数器

更新:由于我没有脑震荡问题,我为上述问题编写了以下代码:

    if($mar = $db->query("SELECT max(id) FROM jobs")) {
    if($mar2 = $mar->fetch_row()) {
        $mar3 = $mar2[0]; //----> max id from jobs table
        $mar4 = $mar3 - 1; //--> the 2nd biggest id which has the last inserted ref
    }
}

if($vak = $db->query("SELECT * FROM jobs where id = $mar4")) {
    if($vak2 = $vak->fetch_object()) {
        $vak3 = $vak2->case_reference;
            $vak3_len = strlen($vak3);
            $vak4 = substr($vak3, 4); //----> the last number of the last job num

        $vak5 = $vak2->created;
        $vak7 = substr($vak5, 8, 2); //----> the date(d) of the one which has a job num
    }
}

if($zan = $db->query("SELECT * FROM jobs where id = $mar3")) {
    if($zan2 = $zan->fetch_object()) {
        $zan3 = $zan2->created;
            $zan4 = substr($zan3, 2, 2); //----> the date(y) of the one without job num 
            $zan5 = substr($zan3, 5, 2); //----> the date(m) of the one without job num
            $zan7 = substr($zan3, 8, 2); //----> the date(d) of the one without job num
    }
}

$realcount = $vak4+1;
$ace = 1;
if($zan7 >= $vak7) {
    $ref = $zan4.$zan5.$realcount;
} else { $ref = $zan4.$zan5.$ace; } //----> $ref = the job num that gets inputed in new inserts


if($sqlref = $db->query("UPDATE  `prinseapals`.`jobs` SET  `case_reference` =  $ref WHERE  `jobs`.`id` = $mar3")) {

}
所需的表将类似于:

customer    vessel         created          ref_num

nomikos     lucky luke     2013-09-04   1309/25
allseas     letto          2013-09-18   1309/26
medcare     marina         2013-10-01   1310/1
golden      kamari         2013-10-14   1310/2
marine      winner         2013-11-01   1311/1
欢迎所有帮助,只是想让你知道我对PHP MySQL真的很陌生。 提前谢谢。 但现在的问题是,在最后一个$ref变量中,我不能在最后一个数字之前用这样的斜杠表示
“/”。
有人知道为什么吗??我试过使用双引号,但它也不起作用。似乎这还不够,现在我尝试将此页面上载到我的实际站点,但当它在本地工作时,它不在线:(((

试试这个.)

   $ref = $zan4.$zan5.'/'.$realcount;

仅当不是问题时,在类似问题中,您可以使用我的解决方案:

if($mar = $db->query("SELECT max(id) FROM jobs")) {  //----> $db = your connection and jobs = the table
    if($mar2 = $mar->fetch_row()) {
        $mar3 = $mar2[0]; //----> max id from jobs
        $mar4 = $mar3 - 1; //----> the 2nd max id thich has on it assigned the last ref number
    }
}

if($vak = $db->query("SELECT * FROM jobs where id = $mar4")) {
if($vak2 = $vak->fetch_object()) {
    $vak3 = $vak2->case_reference;
        $vak3_len = strlen($vak3);
        $vak4 = substr($vak3, 5); //----> the last ref number

    $vak5 = $vak2->created;
    $vak7 = substr($vak5, 8, 2); //----> date(d) of the row which HAS a ref num
}
}

if($zan = $db->query("SELECT * FROM jobs where id = $mar3")) {
    if($zan2 = $zan->fetch_object()) {
        $zan3 = $zan2->created;
            $zan4 = substr($zan3, 2, 2); //----> date(y) of the row which HAS NOT a ref num 
            $zan5 = substr($zan3, 5, 2); //----> date(m) of the row which HAS NOT a ref num
            $zan7 = substr($zan3, 8, 2); //----> date(d) of the row which HAS NOT a ref num

            $realcount = $vak4+1;
            $ace = 1;
        if($zan7 >= $vak7) {
        $ref = $zan4.$zan5."/".$realcount;
        } else { $ref = $zan4.$zan5."/".$ace; } //----> $ref = the final number you created to use 

            if($db->query("UPDATE  jobs SET  case_reference = '$ref' WHERE  id = $mar3")) {

            }

    }
}