Есть две таблицы, таблица ответов на вопросы, и таблица ответов пользователей на данные вопросы.
Как выбрать все вопросы на которых пользователь ответил правильно, с учетом того что у одного вопроса может быть несколько правильных ответов.
Таблицу вопросов не стал приводить, так как в контексте задачи она не нужна, связь с ней идет по question_id
CREATE TABLE `cms_testing_answer` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор',
`question_id` int(11) NOT NULL DEFAULT '0' COMMENT 'Вопрос',
`status` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT 'Статус',
`sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Сортировка',
`title` text NOT NULL COMMENT 'Заголовок',
`mark` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT 'Оценка',
`is_correct` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT 'Флаг правильного ответа',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1169 DEFAULT CHARSET=utf8;
CREATE TABLE `cms_testing_user_answer` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор',
`session_id` int(11) NOT NULL DEFAULT 'Идентификатор сессии тестирования',
`question_id` int(11) NOT NULL DEFAULT 'Идентификатор вопроса',
`user_id` int(11) unsigned NOT NULL DEFAULT 'Идентификатор пользователя',
`test_id` int(11) NOT NULL DEFAULT 'Идентификатор тестирования',
`answer_id` int(11) NOT NULL DEFAULT 'Идентификатор ответа',
`created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Дата создания',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=133 DEFAULT CHARSET=utf8;
Пример правильный/ не правильный ответ из таблицы
Ответы на вопрос
cms_testing_answer
id | question_id | ___title___ | is_correct
1 ______1___________ Ответ 1_______1
2 ______1___________ Ответ 2_______1
3 ______1___________ Ответ 3_______0
Пользователь ответил на вопрос правильно
cms_testing_user_answer
id | question_id | answer_id
1 ______1___________ 1
2 ______1___________ 2
Пользователь ответил на вопрос не правильно
cms_testing_user_answer
id | question_id | answer_id
1 ______1___________ 1
2 ______1___________ 3
Пользователь ответил на вопрос не правильно
cms_testing_user_answer
id | question_id | answer_id
1 ______1___________ 1
Пользователь ответил на вопрос не правильно
cms_testing_user_answer
id | question_id | answer_id
1 ______1___________ 1
1 ______1___________ 3
Вообщем вот, удалось составить корректный запрос
SELECT
qanswer.question_id
FROM
cms_testing_answer qanswer
LEFT JOIN cms_testing_user_answer uanswer ON uanswer.answer_id = qanswer.id
WHERE qanswer.is_correct=1
GROUP BY qanswer.question_id
HAVING COUNT(qanswer.id)=COUNT(uanswer.id)