How to get next alpha-numeric ID based on existing value from MySQL

前端 未结 6 510
我在风中等你
我在风中等你 2020-12-19 07:28

First, I apologize if this has been asked before - indeed I\'m sure it has, but I can\'t find it/can\'t work out what to search for to find it.

I need to generate un

6条回答
  •  一向
    一向 (楼主)
    2020-12-19 07:46

    A hacky version that works for InnoDB as well.

    Replace the insert to companies with two inserts in a transaction:

        INSERT INTO __keys
          VALUES (LEFT(LOWER('Smiths Joinery'),4), LAST_INSERT_ID(1))
        ON DUPLICATE KEY UPDATE
          num = LAST_INSERT_ID(num+1);
    
        INSERT INTO __companies (comp_name, reference)
        VALUES ('Smiths Joinery',
                CONCAT(LEFT(LOWER(comp_name),4), LPAD(LAST_INSERT_ID(), 4, '0')));
    

    where:

        CREATE TABLE  `__keys` (
          `prefix` char(4) NOT NULL,
          `num` smallint(5) unsigned NOT NULL,
          PRIMARY KEY (`prefix`)
        ) ENGINE=InnoDB COLLATE latin1_general_ci;
    
        CREATE TABLE  `__companies` (
          `comp_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
          `comp_name` varchar(45) NOT NULL,
          `reference` char(8) NOT NULL,
          PRIMARY KEY (`comp_id`)
        ) ENGINE=InnoDB COLLATE latin1_general_ci;
    

    Notice:

    • latin1_general_ci can be replaced with utf8_general_ci,
    • LEFT(LOWER('Smiths Joinery'),4) would better become a function in PHP

提交回复
热议问题