简体   繁体   English

插入一对一的关系

[英]Insert into One-to-One Relationship

My MySQL database contains two tables: user and coupon (one-to-one relationship). 我的MySQL数据库包含两个表: usercoupon (一对一的关系)。

I would like to select all users that do not have a coupon and create a new one (random and unique). 我想选择所有没有优惠券的用户并创建一个新的(随机且唯一的)。

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

Shortcuts: 快捷键:

Select all users without coupon: SELECT * from user WHERE coupon_id IS NULL; 选择没有优惠券的所有用户: SELECT * from user WHERE coupon_id IS NULL;

Generate a random 6-chars string (MySQL): LEFT(sha1(rand()), 6) . 生成一个随机的6个字符串(MySQL): LEFT(sha1(rand()), 6)

Assuming you don't mind continuing upwards from 6 for the next coupon_id , this can be done as follows (see SQL Fiddle Demo ): 假设你不介意从下一个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;

Something like this maybe: 这样的事情可能是:

Insert into coupon 
select distinct id,LEFT(sha1(rand()), 6) 
from user WHERE coupon_id IS NULL

After this, you can update coupon in user table using simple update with join. 在此之后,您可以使用简单的连接更新来更新用户表中的优惠券。

//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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM