Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 完成一年后重置收据编号_Php_Mysql - Fatal编程技术网

Php 完成一年后重置收据编号

Php 完成一年后重置收据编号,php,mysql,Php,Mysql,在我的项目收据中,编号为自动递增,一年的完工日期为每年的4月1日至3月31日。年度完成后,收据编号应重置为1。我已经试了很久了,但一开始就做不到。事先非常感谢你 $query = mysql_query("SELECT `receipt_no` FROM tsurphus"); if(mysql_num_rows($query)>0) { $data = mysql_query("SELECT max(receipt_no)+1 FROM tsurphus"); $r

在我的项目收据中,编号为自动递增,一年的完工日期为每年的4月1日至3月31日。年度完成后,收据编号应重置为1。我已经试了很久了,但一开始就做不到。事先非常感谢你

$query = mysql_query("SELECT `receipt_no` FROM tsurphus");   
if(mysql_num_rows($query)>0) {
    $data = mysql_query("SELECT max(receipt_no)+1 FROM tsurphus");
    $res = mysql_fetch_row($data);
    echo $res[0];
    echo $_POST['$res'];
}
else {
    echo 1;
}

您有一个关于多会话的一般问题。当你的网站几乎同时被调用时,你阅读收据的方式会导致你得到两个相同的号码

有一些方法。一个是您在每年4月1日午夜创建一个新的表
tsurphos
,其中
收据号
重置为0。当定义为
自动递增时,此表中的每个插入都将生成一个绝对唯一的值

但由于缺乏信息,这可能不是适合您的解决方案

根据评论中的要求进行更新

我只能告诉你我是怎么做的。你必须决定它是否适合你。对于我写的这个项目,这是一个完美的解决方案,因为他们每个财政年度都需要一张完整的空表

我在每年1月1日午夜作为cron作业运行此命令。逻辑的实现方式是,从未与现有的
INSERT
命令发生冲突[我的意思是,在尚未创建新表时,从未有
INSERT
命令]:

CREATE TABLE IF NOT EXISTS tsurphus_2016 LIKE tsurphus_2016;
我不知道您对
主键
名称的内部约定如何,但是-如果
主键
的名称与表中的名称相同,那么您还必须重命名
主键

ALTER TABLE tsurphus_2016 CHANGE `tsurphus_2015id` 
                              `tsurphus_2016id` INT( 11 ) NOT NULL AUTO_INCREMENT

您必须在每年4月1日午夜运行它。

您的代码不显示自动递增,而是显示一个简单的查询。尝试在查询中包括年份,以便选择当前年份的最大编号。更好的是,不要担心数字,使用适当的自动递增字段,这样每个收据都有一个唯一的数字,而不是一个每次重复的数字year@Shadow谢谢你的回复,你能告诉我你建议的代码吗…这是根本性的缺陷。不要在这种情况下使用自动增量功能。不要使用PHP不推荐使用的mysql\uAPI!忽略房间里的大象。@AlBundy。你是对的。每个财政年度应有不同的表格。请你做同样的编码,这样我就可以简单地复制和粘贴在这里作为im beginer在php。提前多谢了。@Explorer对于PHP来说真的不算太多。您必须确定旧表名[我附加财政年度-例如2016年],然后用新财政年度替换它。检查我的最新答案。