mySQL-在插入之后/插入期间添加预定义值?有更好的方法吗?

mySQL-在插入之后/插入期间添加预定义值?有更好的方法吗?,mysql,sql,database,Mysql,Sql,Database,我有两张桌子 tbl_产品-从这里我将随机选择产品 tbl_验证-我需要在这里插入tbl_产品中的12个随机产品,并将其分配给4个不同的用户。为每个用户提供3种产品 第一部分获得随机产品并插入到其他表中当然很容易。但我不知道如何将这些产品分配给不同的用户(4个用户&每个用户需要3个产品)。因此,我的方法是按照以下步骤使用临时表: DROP PROCEDURE IF EXISTS get_verify; DELIMITER // CREATE PROCEDURE get_verify()

我有两张桌子

  • tbl_产品-从这里我将随机选择产品
  • tbl_验证-我需要在这里插入tbl_产品中的12个随机产品,并将其分配给4个不同的用户。为每个用户提供3种产品
第一部分获得随机产品并插入到其他表中当然很容易。但我不知道如何将这些产品分配给不同的用户(4个用户&每个用户需要3个产品)。因此,我的方法是按照以下步骤使用临时表:

DROP PROCEDURE IF EXISTS get_verify; 

DELIMITER //
CREATE PROCEDURE get_verify()
BEGIN

-- trunc the temp table   
TRUNCATE TABLE temp_tbl;

-- reset auto_increment
ALTER TABLE temp_tbl AUTO_INCREMENT = 1;

-- insert random producst into temp table
insert into temp_tbl (`prod_id` ,`closed_on` ,`closed_by`)
SELECT prod_num as prod_id, DATE_FORMAT (closed,'%d.%m.%Y' )as closed_on ,agent  as closed_by
FROM tbl_products a
WHERE DATE(closed) > (NOW() - INTERVAL 7 DAY)
ORDER BY RAND()
LIMIT 12; 

-- update temp table and assign products to the users
update temp_tbl
set verify_by =
case
when id in (1,2,3) then 1
when id in (4,5,6) then 2
when id in (7,8,9) then 3
when id in (10,11,12) then 4
else 0
end
;

-- insert data from temp table to final table 
insert into tbl_verify (`prod_id` ,`closed_on` ,`closed_by` ,  verify_by)
select prod_id, closed_on, closed_by, verify_by
from temp_tbl
;

commit;

END //
DELIMITER ;
要解释我的工作:

  • trunc和重置温度表的自动增量
  • 随机选择12种产品
  • 将随机选择的产品插入临时表
  • 临时表中的产品ID为1-12
  • 通过向每个产品ID添加用户ID更新临时表(当产品1时,用户1,等等)
  • 通过从临时表中选择数据,在最终表中插入数据
一切正常,只是想检查是否有更好的方法


感谢您的
更改表格温度自动增量=1
是多余的,
TRUNCATE
已经为您完成了这项工作

您的临时表(以及整个过程)也是多余的。在的帮助下,您可以在一个语句中完成这一切


谢谢,看起来很棒!我知道一定有比我更好的方法。
insert into tbl_verify (`prod_id`, `closed_on`, `closed_by`, verify_by)
select prod_id, closed_on, closed_by, user from (
SELECT prod_num as prod_id, DATE_FORMAT(closed,'%d.%m.%Y') as closed_on ,agent  as closed_by
, @row := @row + 1 as row 
, case when @row between 1 and 3 then 1
       when @row between 4 and 6 then 2
       when @row between 7 and 9 then 3
       when @row between 10 and 12 then 4
       else 0 end as user
FROM tbl_products a
, (select @row := 0) v
WHERE DATE(closed) > (NOW() - INTERVAL 7 DAY)
ORDER BY RAND()
LIMIT 12
) sq