2013-04-05 88 views
0

我有一些電子商務網站的優惠券軟件。我想一次生成一堆優惠券。它由2個表格組成。 1爲優惠券,1爲優惠券說明。主鍵是coupon_id。是這個正確的SQL?

這是做sql的正確方法嗎? coupon_id會匹配嗎?由於它是自動遞增的,我不是輸入一個數字,我認爲它應該。

編輯:我只是複查,僅在優惠券表的coupon_id字段自動遞增的不是一個在coupon_description

但我不知道,如果使用2個刀片是正確的方式。

INSERT INTO coupons (
    coupon_id, 
    coupon_type, 
    coupon_code, 
    coupon_amount, 
    coupon_minimum_order, 
    coupon_start_date, 
    coupon_expire_date, 
    uses_per_coupon, 
    uses_per_user, 
    restrict_to_products, 
    restrict_to_categories, 
    restrict_to_customers, 
    coupon_active, 
    date_created, 
    date_modified 
    ) 
    VALUES (
    '' , '', '" . substr(md5(uniqid(rand(), true)), 0, 8) ."', '100' , '1' , '06/05/2013' , '06/11/2013' , '1' , '1', '', '', '', '', '', '') 

    INSERT INTO coupons_description (
    coupon_id, 
    language_id, 
    coupon_name, 
    coupon_description 
    ) 

    VALUES (
    '', '1', 'test coupon', 'test' 

    ) 

回答

0

由於只有一個是自動遞增的,所以我會先插入該表,然後查找該值並將其硬編碼到從屬表中。即:

INSERT INTO coupons (
coupon_type, 
coupon_code, 
...) 
VALUES ('', '" . substr(md5(uniqid(rand(), true)), 0, 8) ."', '100' ,...). 

請注意,coupon_id不在insert語句中。數據庫將自己分配(假定自動增量正在做它應該做的)。一些數據庫讓你分配這個,但我認爲這是一個糟糕的形式。那麼問題就是再次找到該記錄。我會用:

select * from coupons order by coupon_id desc; 

除非別人是在同一時間加入優惠券,你應該看到在上面的優惠券。如果您使用了唯一的優惠券名稱或說明,這將有所幫助。無論如何,你必須採取分配的ID,然後更新表沒有自動增量:

INSERT INTO coupons_description (
coupon_id, 
language_id, 
coupon_name, 
coupon_description) 

VALUES ('123', '1', 'test coupon', 'test') 

其中「123」是真的不管你coupon_id從select語句中。

但是你的語法看起來不錯,否則。

+0

我走了這個,只是設置循環開始在我檢查數據庫中的最後一個值。不是這樣做的最好方法。我認爲這些表格可能應該結合起來,但我沒有時間重新編寫隨附的代碼。無論如何感謝您的幫助 – Sackling 2013-04-14 00:57:46

0

我可以去「消費券」,表檢查最大coupon_id並明確指定插入新的ID。我認爲這是防止任何不匹配的更安全的方法。

假設您已經有100張優惠券了。所以你的情況:

INSERT INTO coupons (
    coupon_id, 
    coupon_type, 
    ... 
) VALUES (101 , '', ...); 

INSERT INTO coupons_description (
    coupon_id, 
    language_id, 
    coupon_name, 
    coupon_description 
) VALUES (101, '1', 'test coupon', 'test') 
0

我建議要麼合併這兩個表(他們似乎有一個1:1的關係),或改變說明表,以便coupon_id是第一個表的外鍵和刪除自動增量。之後,你可以插入到第一個表中,然後不用猜測要插入到第二個表中的id,你只需使用select @@ identity; (或選擇scope_identity();如果在SQL服務器上)