[英]Insert into One-to-One Relationship
我的MySQL数据库包含两个表: user
和coupon
(一对一的关系)。
我想选择所有没有优惠券的用户并创建一个新的(随机且唯一的)。
user TABLE:
___________________________________
| id | name | coupon_id |
-----------------------------------
1 John 5
2 Mary (null) // Need to create one coupon.
3 Doe 2
4 Max (null) // Need to create one coupon.
5 Rex 1
7 Bill (null) // Need to create one coupon.
coupon TABLE:
______________________________________________
| id | code (random 6-chars - unique) |
----------------------------------------------
1 80k2ni
2 0akdne
5 nk03jd
快捷键:
选择没有优惠券的所有用户: SELECT * from user WHERE coupon_id IS NULL;
生成一个随机的6个字符串(MySQL): LEFT(sha1(rand()), 6)
。
假设你不介意从下一个coupon_id
继续向上6,这可以按如下方式完成(参见SQL Fiddle Demo ):
-- Declare and set variables
SET @id_for_insert = (SELECT MAX(`id`) FROM `coupon`);
SET @id_for_update = @id_for_insert;
-- Insert new coupons
INSERT INTO `coupon` (id, code)
SELECT @id_for_insert := @id_for_insert + 1, LEFT(SHA1(RAND()), 6)
FROM `user`
WHERE coupon_id IS NULL;
-- Update users that don't already have a coupon with the newly created coupons
UPDATE `user`
SET coupon_id = @id_for_update := @id_for_update + 1
WHERE coupon_id IS NULL;
这样的事情可能是:
Insert into coupon
select distinct id,LEFT(sha1(rand()), 6)
from user WHERE coupon_id IS NULL
在此之后,您可以使用简单的连接更新来更新用户表中的优惠券。
//check if works inform me i will be glad
CREATE PROCEDURE `syncCouponUser` ()
BEGIN
INSERT INTO coupon(id,code)//create coupons var no-used user ids
select
id,
LEFT(sha1(rand())
from user
where coupon_id IS NULL ;
UPDATE user //add coupons from coupon table with matches
SET coupon_id=(
select c.coupon_id
from coupon c join user u
on c.id=u.id);
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.