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