【问题标题】:How to increment Prod_id based on Product_Name using trigger in mysql如何使用 mysql 中的触发器根据 Product_Name 增加 Prod_id
【发布时间】:2014-04-23 01:31:26
【问题描述】:

Product_Details 表:(字段)Prod_id(主键)、Product_Name、前缀和 Slno(自动递增)

我需要根据产品名称字段和前缀字段增加Prod_Id(前缀输入将由用户给出)。我已经有 concat 前缀和 id。但我无法实现如下所示的顺序

    Product Name      Prefix      Prod_id
    BOOK              BO          BO_001
    FLOWER            FLOW        FLOW_001
    BOOK              BO          BO_002
    DESK              DE          DE_001
    DESK              DE          DE_002
    FLOWER            FLOW        FLOW_002

到目前为止,我已经实现了一个触发器

DELIMITER $$
    CREATE TRIGGER tg_customer_details_INSERT
    BEFORE INSERT ON customer_details
    FOR EACH ROW
      BEGIN
        INSERT INTO product_details_seq VALUES (NULL);
        SET NEW.Slno = coalesce((select max(Slno) from product_details), 0) + 1;
         SET NEW.Prod_id = CONCAT((NEW.Prefix), LPAD(LAST_INSERT_ID(), 3, '0'));
      END$$
DELIMITER;

但在这段代码中,我得到的输出类似于 book_001、flower_002、book_003、desk_004、Flower_005....等等。我需要为每个产品名称设置一个单独的序列。由于这是一个优先事项,请提供帮助。所有 Db 国王都能回答。

谢谢, 魔方。

【问题讨论】:

  • Nobody in stack overflow 解决了这个问题,请帮我写代码。谢谢 Acube。

标签: mysql triggers innodb auto-increment composite-key


【解决方案1】:

终于创建了增量序列,需要将前缀和Prod_id连接起来。做不到,这方面需要您的帮助...

BEGIN
 select count(*) into @Product_Name from product_details where Product_Name = NEW.Product_Name;
         select Prod_id + 1 into @Prod_id from product_details where Product_Name = NEW.Product_Name order by Prod_Id desc limit 1;
        if @Product_Name > 0 then
           set NEW.Prod_id = @Prod_id;
       else
           set NEW.Prod_id = 1;

       end if;
    SET NEW.Slno = coalesce((select max(Slno) from product_details), 0) + 1;

    end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2021-04-06
    • 2016-12-08
    相关资源
    最近更新 更多