在char字段中查找下一个id而不自动递增

8tntrjer  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(321)

我有一张放东西的table。物体可以是从椅子到雇员的任何东西。一个对象得到了一个objectid,它是对象上一个10个字符的code-39条形码标签。
许多对象已经有了标签,因此分配给它们的objectid。有些有前缀,例如“900000345”可能是办公桌,“0000000895”可能是带有发票的文件夹。
例如,当人们创建一个新文件夹时,他们会把预先打印好的条形码标签放在上面。预打印的条形码标签由打印机生成,打印机只需将数字增加1,然后将其填充为10位数字,然后将其打印为代码39。
所有大多数对象都存储在excel表中。现在应该将它们迁移到mysql数据库中。
现在,系统还应该能够自己创建对象。系统创建的对象有一个前导“1”,例如“1000000426”。
问题:如何为自动生成的对象获取下一个objectid?我不能真正使用自动增量,因为表中还有非自动生成的行。
另一个需要说明的是'objectid'字段必须是char(10),因为在特殊情况下,会使用字母数字前缀,如“t1”->“t100003158”
使用自动增量时的我的表:

| 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 |

表中最后一个对象的objectid应该是“1000000002”而不是“1000000003”
我希望我能很好地解释这个问题。

xtupzzrd

xtupzzrd1#

简单的解决方案可以是:

SELECT CAST(ObjectID AS UNSIGNED) + 1 FROM yourTable WHERE ObjectId LIKE "1%" ORDER BY ObjectID DESC LIMIT 1

基本上从1开始搜索所有对象id,然后对它们进行排序(因为它的零填充我们仍然可以排序),然后将结果转换为int并递增。
先转换为int然后在两者之间转换可能会更快。其他的也一样

相关问题