我有一个存储对象的表。对象可以是从椅子到员工的任何东西。一个Object有一个ObjectID,它是Object上的10个字符的代码-39条形码标签。
许多对象已经有了一个Label,因此会向它们发送一个ObjectID。有些人有前缀,例如" 9000000345"可能是一个服务台或" 0000000895"可能是一张带发票的文件夹。
例如,当人们开始使用新文件夹时,他们会使用预先打印的条形码标签 并把它们放在上面。预打印的条形码标签由打印机生成,只需将数字增加1并将其填充为10位数,然后将其打印为代码39。
全部大多数对象都存储在Excel表格中。现在应该将它们迁移到MySQL数据库中。
现在,系统还应该能够自己创建对象。系统创建的对象具有领先的" 1"例如" 1000000426"
问题:如何获取自动生成的对象的下一个ObjectID? 我真的不能使用AUTO_INCREMENT,因为表中还有非自动生成的行。
另一件要说的是' ObjectID'字段必须是CHAR(10),因为在特殊情况下使用的字母数字前缀类似于" T1" - > " T100003158"
使用AUTO_INCREMENT时我的表:
| ID | Created | ObjectID | Parent | Title | Changed | Note |
|----|-------------|--------------|--------|-------------|-------------|------|
| 1 | <timestamp> | "1000000001" | NULL | "Shelf 203" | <timestamp> | NULL |
| 2 | <timestamp> | "9000000458" | NULL | "Lamp" | <timestamp> | NULL |
| 3 | <timestamp> | "1000000003" | NULL | "Shelf 204" | <timestamp> | NULL |
表中最后一个Object的ObjectID应为&#34; 1000000002&#34;不是&#34; 1000000003&#34;
我希望我能够很好地解释这个问题。
答案 0 :(得分:0)
朴素的解决方案可以是:
SELECT CAST(ObjectID AS UNSIGNED) + 1 FROM yourTable WHERE ObjectId LIKE "1%" ORDER BY ObjectID DESC LIMIT 1
基本上搜索以1xxxx开头的所有对象ID然后对它们进行排序(因为它的零填充我们仍然可以排序)然后将结果转换为int并递增它。
首先可以更快地转换为int然后执行。休息是一样的