我有一些电子商务网站的优惠券软件。我想一次生成一堆优惠券。它由两个表组成。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'
)
发布于 2013-04-06 03:23:31
因为只有一个是自动递增的,所以我将首先插入到表中,然后查找该值并将其硬编码到依赖表中。这就是:
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。
但是你的语法看起来确实是正确的,否则。
发布于 2013-04-06 00:35:28
我可能会去‘优惠券’表检查最大的coupon_id,并在insert中显式指定新的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-06 03:12:08
我建议要么合并这两个表(它们似乎有1:1的关系),要么更改description表,使coupon_id成为第一个表的外键,并删除自动增量。然后,您可以插入到第一个表中,而不是尝试猜测要插入到第二个表中的id,只需使用select @@identity;(如果在sql server上,则选择scope_identity();)
https://stackoverflow.com/questions/15838597
复制相似问题