Сравнение данных их двух таблиц и занесение данных в третью

133
15 декабря 2016, 15:52

Доброй ночи! Проблема такая. Есть две таблицы в БД - в одной "ответы студента на тест", в другой "ключи к тесту". Требуется написать процедуру или функцию, которая бы сравнивала соответствующие значения (ответ на №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);
Answer 1

А зачем вам вставлять в таблицу? просто запросом нельзя обойтись?

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;
READ ALSO
Обновление таблицы MySQL

Обновление таблицы MySQL

Например существует таблица в БД:

174
Выбокра из БД user с его детьми бесконечно

Выбокра из БД user с его детьми бесконечно

Здравствуйте, первый раз сталкиваюсь с такой выборкойВо общем есть такая таблица user

128
Нужно соединить два MySQL запроса в один, помогите пожалуйста!

Нужно соединить два MySQL запроса в один, помогите пожалуйста!

Нужно соединить два MySQL запроса в один, помогите пожалуйста!

164
Подскажите язык для реализации

Подскажите язык для реализации

Есть одностраничный сайт, там есть кнопка и два поля для текста, в одно пользователь вводит текст, при нажатии на кнопку, текст должен записаться...

113