2014-02-27 97 views
0

我試圖產生一堆折扣代碼。這些都有外鍵約束。與外鍵的SQL循環

目前,我有

INSERT INTO code (title, code, desc) VALUES ('code1','XPISY9','test code'); 
INSERT INTO code_details (code_id, used, attempts) VALUES (
SELECT code_id from code where code = 'XPISY9',0,0); 

在code_details的code_id是在碼錶code_id的外鍵。

什麼是最好的方式來創建一個循環,我可以生成一組這些值(大約100)。我需要的代碼是一個不重複的隨機值。

任何幫助,將不勝感激。

感謝

+1

是SQL的聲明性語言,而不是一個必要的一個,試圖在SQL中生成一些東西並不是一個好方法。相反,你應該尋找試圖通過完成某些條件從某處選擇它們來表達所需的所有代碼。 –

回答

0

感謝您的幫助球員。我決定放在一起的過程,這和它的偉大工作:

DELIMITER $$ 
CREATE PROCEDURE vouchergen(IN length INT(10) ,IN duration VARCHAR(20),IN sponsor VARCHAR(20),IN amount INT(10)) 
BEGIN 

DECLARE i INT DEFAULT 1; 

WHILE (i< amount) DO 

SET @vcode= CONCAT(BINARY brand , UPPER(SUBSTRING(MD5(RAND()) FROM 1 FOR 6))); 

INSERT INTO code (title, code, desc) VALUES (CONCAT(brand,i),@vcode,CONCAT(length,' ',duration)); 

INSERT INTO code_details (code_id, used, attempts) VALUES (
SELECT code_id from code where code = @vcode,0,0); 

SET i=i+1; 

END WHILE; 
END$$; 

我可以調用這根然而,許多我想:

CALL vouchergen(1,'week',APPL,400); 
CALL vouchergen(1,'month',APPL,100); 
CALL vouchergen(1,'day',APPL,200); 
0

一旦你有你的100個左右的記錄,在該代碼表,你可以在一個聲明中添加代碼的細節:

INSERT INTO code_details (code_id, used, attempts) 
SELECT code, 0, 0 
FROM code; 

首先生成的代碼記錄則是另一回事最好使用其他工具在文本文件中生成100條插入語句,然後執行。

我已經看到用每種可能的腳本語言完成 - 選擇了你最喜歡的。我甚至看到Excel使用id和string公式的列來生成插入語句。