我有一些电子商务网站的优惠券软件。我想立刻生成一堆优惠券。它由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'
)
答案 0 :(得分: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')
答案 1 :(得分:0)
我建议合并两个表(它们似乎具有1:1关系)或更改描述表,以便coupon_id是第一个表的外键,并删除自动增量。之后你可以插入到第一个表中,然后不要试图猜测要插入第二个表的id,而只需使用select @@ identity; (或选择scope_identity();如果在sql server上)
答案 2 :(得分: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'实际上是您从select语句中找到的coupon_id。
但是你的语法看起来是正确的,否则。