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种产品
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