Доброй ночи! Проблема такая. Есть две таблицы в БД - в одной "ответы студента на тест", в другой "ключи к тесту". Требуется написать процедуру или функцию, которая бы сравнивала соответствующие значения (ответ на №1 и ключ к №1), и заносила в третью таблицу (результаты) значение 1 если ответ совпал с ключом, и 0 если не совпал.
Вот коды таблиц:
CREATE TABLE IF NOT EXISTS `test_keys`
( `variant` int(5) NOT NULL,
`ex_1` varchar(3) NOT NULL, `ex_2`
varchar(3) NOT NULL, `ex_3`
varchar(3) NOT NULL, `ex_4`
varchar(5) NOT NULL, `ex_5`
varchar(5) NOT NULL, PRIMARY KEY
(`variant`), UNIQUE KEY `variant`
(`variant`), UNIQUE KEY `variant_2`
(`variant`) ) ENGINE=MyISAM DEFAULT
CHARSET=utf8;
--
-- Дамп данных таблицы `test_keys`
--
INSERT INTO `test_keys` (`variant`,
`ex_1`, `ex_2`, `ex_3`, `ex_4`,
`ex_5`) VALUES (11, 'B', 'B', 'A',
'B', 'B'), (13, 'C', 'C', 'C', 'A',
'A'), (51, 'A', 'A', 'B', 'B', 'C');
//-----------------------
CREATE TABLE IF NOT EXISTS
`test_papers` ( `student_id` int(10)
NOT NULL, `test_id` int(10) NOT NULL
AUTO_INCREMENT, `variant` int(5) NOT
NULL, `ex_1` varchar(3) NOT NULL,
`ex_2` varchar(3) NOT NULL, `ex_3`
varchar(3) NOT NULL, `ex_4`
varchar(5) NOT NULL, `ex_5`
varchar(5) NOT NULL, PRIMARY KEY
(`test_id`), KEY `student_id`
(`student_id`) ) ENGINE=MyISAM
DEFAULT CHARSET=utf8 AUTO_INCREMENT=8
;
--
-- Дамп данных таблицы `test_papers`
INSERT INTO `test_papers`
(`student_id`, `test_id`, `variant`,
`ex_1`, `ex_2`, `ex_3`, `ex_4`,
`ex_5`) VALUES (14, 6, 13, 'A', 'B',
'B', 'B', 'C'), (1, 7, 51, 'C', 'C',
'B', 'A', 'C');
//-----------------
-- Структура таблицы `test_results`
--
CREATE TABLE IF NOT EXISTS
`test_results` ( `stud_id` int(10)
NOT NULL, `test_id` int(10) NOT
NULL, `variant` int(5) NOT NULL,
`ex_1` int(2) NOT NULL, `ex_2`
int(2) NOT NULL, `ex_3` int(2) NOT
NULL, `ex_4` int(2) NOT NULL,
`ex_5` int(2) NOT NULL, `mark`
int(2) NOT NULL, KEY `stud_id`
(`stud_id`), KEY `test_id`
(`test_id`) ) ENGINE=MyISAM DEFAULT
CHARSET=utf8;
--
-- Дамп данных таблицы `test_results`
--
INSERT INTO `test_results` (`stud_id`,
`test_id`, `variant`, `ex_1`, `ex_2`,
`ex_3`, `ex_4`, `ex_5`, `mark`) VALUES
(13, 1, 44, 1, 1, 1, 0, 0, 3), (14, 6,
13, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0,
0, 0, 0, 0), (16, 0, 0, 0, 0, 0, 0, 0,
0);
А зачем вам вставлять в таблицу? просто запросом нельзя обойтись?
SELECT tp.student_id, tp.test_id, tp.variant,
if(tp.ex_1 = tk.ex_1,1,0) ex_1,
if(tp.ex_2 = tk.ex_2,1,0) ex_2,
if(tp.ex_3 = tk.ex_3,1,0) ex_3,
if(tp.ex_4 = tk.ex_4,1,0) ex_4,
if(tp.ex_5 = tk.ex_5,1,0) ex_5,
if(tp.ex_1 = tk.ex_1,1,0)+
if(tp.ex_2 = tk.ex_2,1,0)+
if(tp.ex_3 = tk.ex_3,1,0)+
if(tp.ex_4 = tk.ex_4,1,0)+
if(tp.ex_5 = tk.ex_5,1,0) AS mark
FROM test_papers tp
JOIN test_keys tk ON tp.variant = tk.variant;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей