2013-01-25 42 views
1

在BPM Web应用程序中,我在特定页面上有一个发票#字段,但我需要在每次用户附加发票并查看该页面时自动生成该字段。该号码必须是唯一的,最好是自动递增的。可以通过从外部MYSQL数据库的表中查询来显示发票号字段的值。所以每次用户登陆特定页面时,都可以触发SELECT查询语句。为BPM应用程序生成自动递增的ID

在MYSQL端,我该如何设置它?所以基本上,我想设置一个查询该发票#字段,它将运行查询,例如, SELECT invoice_num FROM invoice_generator

并且每次此查询运行时,它都会返回下一个增加的数字。

回答

1

您可以使用MySQL的在这里触发概念.... 我加入了一个例子这里... 这将是非常有用的U(见这个链接也:HTTP://www.freemindsystems.com/mysql -triggers-A-实用,例如/)

CREATE TABLE `products` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL DEFAULT '', 
    `price` int(20) NOT NULL DEFAULT '0', 
    `other` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `products_name_idx` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `freetags` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `tag` varchar(50) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `freetagged_objects` (
    `tag_id` int(20) NOT NULL DEFAULT '0', 
    `object_id` int(20) NOT NULL DEFAULT '0', 
    `tagged_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `module` varchar(50) NOT NULL DEFAULT '', 
    PRIMARY KEY (`tag_id`, `object_id`), 
    KEY `freetagged_objects_tag_id_object_id_idx` (`tag_id`, `object_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

INSERT_PRODUCTS_TAGS

DELIMITER || 
DROP TRIGGER IF EXISTS insert_products_tags; 
|| 
DELIMITER @@ 
CREATE TRIGGER insert_products_tags AFTER INSERT ON products 
    FOR EACH ROW 
    BEGIN 
    DECLARE current_id integer; 
    DECLARE tag_id integer; 
    DECLARE next integer; 
    DECLARE tag_field varchar(255); 
    DECLARE next_sep integer; 
    DECLARE current_tag varchar(255); 
    DECLARE right_tag varchar(255); 

    -- We use the field other as comma-separated tag_field 
    SET tag_field = NEW.other; 

    -- Check for empty tags 
    IF (CHAR_LENGTH(tag_field) <> 0) THEN 
     -- Loop until no more ocurrencies 
     set next = 1; 
     WHILE next = 1 DO 
     -- Find possition of the next "," 
     SELECT INSTR(tag_field, ',') INTO next_sep; 
     IF (next_sep > 0) THEN 
      SELECT SUBSTR(tag_field, 1, next_sep - 1) INTO current_tag; 
      SELECT SUBSTR(tag_field, next_sep + 1, CHAR_LENGTH(tag_field)) INTO right_tag; 
      set tag_field = right_tag; 
     ELSE 
      set next = 0; 
      set current_tag = tag_field; 
     END IF; 

     -- Drop spaces between comas 
     SELECT TRIM(current_tag) INTO current_tag; 

     -- Insert the tag if not already present 
     IF (NOT EXISTS (SELECT tag FROM freetags WHERE tag = current_tag)) THEN 
      -- Insert the tag 
      INSERT INTO freetags (tag) values (current_tag); 
      SELECT LAST_INSERT_ID() INTO tag_id; 
     ELSE 
      -- Or get the id 
      SELECT id FROM freetags WHERE tag = current_tag INTO tag_id; 
     END IF; 

     -- Link the object tagged with the tag 
     INSERT INTO freetagged_objects 
      (tag_id, object_id, module) 
      values 
      (tag_id, NEW.id, 'products'); 
     END WHILE; 
    END IF; 
    END; 
@@ 

现在,如果你的产品表执行插入:

INSERT INTO PRODUCTS 
    (name, price, other) 
    values 
    ("product1", 2, "tag1, tag2,tag3 , tag 4"); 
+0

谢谢,这使我指出了正确的方向。 – justWired