Сложный SQL-запрос с бизнес-логикой
Я застрял со сложным запросом, где мне нужно реализовать некоторую бизнес-логику. Ниже приведены таблицы, которые у меня есть (я опустил дополнительные столбцы для удобства чтения)
Team - TeamID, TeamName
TeamMember - MemberID, TeamID, MemberName
Question - QuestionID, CategoryID, DifficultyLevelID, Question
Category - CategoryID, CategoryName
DifficultyLevel - DifficultyLevelID, DifficultyLevelName
QuestionOffered - QuestionOfferedID, QuestionID, OfferedTo
Теперь, бизнес-логика, у меня есть 10 категорий (например, наука, история, география и т. Д.) И 3 уровня сложности (то есть, легкий, средний, жесткий). Каждая категория и уровень сложности имеют 5 вопросов.
Таким образом, 3 x 5 = 15 вопросов для каждой категории (5 простых, 5 средних, 5 сложных). Всего 15 х 10 (категории) = 150 вопросов.
Теперь я хочу, чтобы каждый раз, когда пользователь заходил, я проверял, предложил ли я уже (можно отслеживать из таблицы QuestionsOffered) все 5 вопросов в этой категории и на уровне сложности, если так, то я не буду показывать эту категорию и уровень сложности снова.
Итак, скажем, я прихожу впервые, я получу все категории, а затем, выбрав категорию, я получу все уровни сложности. Теперь я выбираю Easy и продолжаю. Таким образом, в каждой категории я могу выбрать определенный уровень сложности 5 раз, после чего я получу категорию и другие уровни сложности (то есть, средний и жесткий) после того, как я выполнил все 5 простых.
Таким образом, если я закончу со всеми 5 простыми, 5 средними и 5 сложными вопросами в одной категории, сама категория не появится.
Конечно, я могу реализовать эту логику в программировании для заполнения категории, но это закончится многочисленными строками кода.
Так есть ли способ проверить эту бизнес-логику в SQL? Так что я получу данные для заполнения?
1 ответ
Присоединяйтесь к своим вопросам, категориям и уровням, а затем присоединяйтесь к уже предложенным вопросам. Фильтр, где любое поле в таблице предложенных вопросов является нулевым, и у вас будет список вопросов без ответа? возможно?