Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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/70.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 如何在任何表的递增id中添加一系列字符串?_Php_Mysql_Auto Increment - Fatal编程技术网

Php 如何在任何表的递增id中添加一系列字符串?

Php 如何在任何表的递增id中添加一系列字符串?,php,mysql,auto-increment,Php,Mysql,Auto Increment,我有一个MySQL表,数据库中有一个顺序表。这个表有一个自动递增的id。到目前为止,我们有一个通用的数字顺序id,同样是1,2,3,4,5。。。从现在起,我必须将A20系列附加到我的id中,如A20103、A20104、A20105等,当最后三位数字达到999时,附加的系列应更改为A21001、A21002、A21003等,相同的系列必须添加到先前添加的顺序中 我怎样才能完成这项任务?请按照以下内容引导一些内容: "AR2" . str_pad((int) $ordernumber, 4, "0

我有一个MySQL表,数据库中有一个顺序表。这个表有一个自动递增的id。到目前为止,我们有一个通用的数字顺序id,同样是1,2,3,4,5。。。从现在起,我必须将A20系列附加到我的id中,如A20103、A20104、A20105等,当最后三位数字达到999时,附加的系列应更改为A21001、A21002、A21003等,相同的系列必须添加到先前添加的顺序中


我怎样才能完成这项任务?请按照以下内容引导一些内容:

"AR2" . str_pad((int) $ordernumber, 4, "0", STR_PAD_LEFT);
吉姆


[编辑]-我假设这是为了显示,如其他地方所述,DB上的ID字段是整数

不能有非数值字段的自动增量。您最好保留当前的自动递增列,并添加一个新列,根据您的规则手动计算

您可能希望使用MAX()函数获取最新订单并生成下一个值:记住在事务中执行此操作


您可以创建一个函数或触发器,以便干净地执行插入操作。

您不能直接向数据库添加前缀。但是,当选择它时,您可以预先设置它

SELECT concat('A', id) as id FROM table

要获得从20000开始的效果,您可以设置自动增量开始值。

更改现有的自动增量列听起来不是一个好主意-您真的必须这样做吗?相反,为什么不修改select查询以返回格式适当的id呢?通过这样做,您可以保持引用完整性,并且您还可以在将来的任何时候自由更改订单id格式,而无需更新数据库

SELECT id, CONCAT('A2', LPAD(id, 4, '0')) AS order_id FROM <table>;

+1我的客户要求我将订单id更改为这种格式,因为订单id到处都在使用,为了获得正确的字母数字格式,他需要这样的格式…是的,只是为了获得正确的字母数字orderidMO,这是正确的-在这种情况下,您可能需要在sql中进行“填充”。可能与此类似:concat('A',LPAD(orderid,5,'0'))是您的主键,是与订单id列分开的列吗?您不能有字母数字
自动增量列。另外,你的例子也不清楚。您是否只想将
A2
作为订单id的前缀,以便订单id 1变为
A20001
,订单id 999变为
A20999
,订单id 1000变为
A21000
?是的主键是相同的orderid,我需要将A20附加到我的id上,就像id=1的A20001一样,A20002表示id=2,以此类推,当我达到id=999时,它应该是A20999,下一个id应该是A21001为什么它需要从A20999跳到A21001?遗漏A21000有什么原因吗?需要注意的一点是:)我会问他这个问题,main呢requirement@OM永恒:大多数答案都在暗示同样的事情:不要使用ID列,只需根据需要格式化输出。这可以按照Kieran Allen和我的建议使用合适的
SELECT
查询来完成,也可以按照Jim的建议从PHP来完成。除非您有非常好的理由更改主键,否则请别管它!:-)
+------+----------+
| id   | order_id |
+------+----------+
|    1 | A20001   |
|    2 | A20002   
...
|  999 | A20999   |
| 1000 | A21000   |
| 1001 | A21001   |
+------+----------+