0

我有一些电子商务网站的优惠券软件。我想一次生成一堆优惠券。它由 2 张桌子组成。1 用于优惠券,1 用于优惠券描述。主键是 coupon_id。

这是执行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'  

    )
4

3 回答 3

0

我可能会去“优惠券”表检查最大的优惠券 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')
于 2013-04-05T16:35:27.637 回答
0

我建议要么合并这两个表(它们似乎具有 1:1 的关系),要么更改描述表,以便 coupon_id 是第一个表的外键,并删除自动增量。之后你可以插入到第一个表中,而不是试图猜测要插入到第二个表中的 id,你只需使用 select @@identity; (或选择 scope_identity(); 如果在 sql server 上)

于 2013-04-05T19:12:08.433 回答
0

由于只有一个是自动递增的,我会先插入该表,然后查找该值并将其硬编码到依赖表中。那是:

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

请注意,coupon_id 不在插入语句中。数据库将自行分配(假设自动增量正在做它应该做的事情)。一些数据库允许你分配这个,但我认为这种形式不好。那么,问题是再次找到该记录。我会使用:

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”实际上是您从 select 语句中找到的任何 coupon_id。

但是您的语法看起来确实正确,否则。

于 2013-04-05T19:23:30.797 回答