我正在创建一个数据库,其中包含测试、测试问题以及每次测试的问题的信息。我有 3 张桌子:
problem
、test
和 question_list
。 problem
保存问题的信息,test
保存测试的信息,question_list
保存测试的密钥及其所有问题。
我正在尝试创建一个触发器,当基于新的
problems
、question_list
和 test
插入 test_id
时,该触发器将在 problem_count
中插入多个 category
。这是我所拥有的:
DELIMITER #
CREATE TRIGGER generate_question_list
AFTER INSERT ON test
FOR EACH ROW
BEGIN
INSERT INTO question_list (test_id, problem_id)
SELECT NEW.test_id, p.problem_id
FROM problem p
WHERE p.category REGEXP NEW.category
ORDER BY RAND()
LIMIT NEW.problem_count;
END #
我的问题是它给了我一个错误并告诉我它不知道
NEW
是什么。我认为这是因为我试图在 NEW
语句中引用 SELECT
。我怎样才能解决这个问题并使其发挥作用?
为此你需要动态sql
DELIMITER #
CREATE TRIGGER generate_question_list
AFTER INSERT ON test
FOR EACH ROW
BEGIN
SET @d = NEW.problem_count;
PREPARE stmt FROM'
INSERT INTO question_list (test_id, problem_id)
SELECT NEW.test_id, p.problem_id
FROM problem p
WHERE p.category REGEXP NEW.category
ORDER BY RAND()
LIMIT ? ;';
EXECUTE stmt using @d;
DEALLOCATE PREPARE stmt;
END #