要求:我有几千个问题的表格。用户可以查看这些多项选择题,然后回答它们。一旦问题得到解答,即使他在一段时间后登录,也不应再向同一用户显示。
问题
我将如何有效地做到这一点? Bloom Filters会有效吗?
答案 0 :(得分:4)
创建 QuestionsAnswered 表并在您的选择中加入。当用户回答问题时,将问题ID和用户ID插入表中。
CREATE TABLE QuestionsAnswered (UserID INT, QuestionID INT)
SELECT *
FROM Question
WHERE ID NOT IN (SELECT QuestionID
FROM QuestionsAnswered
WHERE UserID = @UserID)
INSERT INTO QuestionsAnswered
(UserID, QuestionID)
VALUES
(@UserID, @QuestionID)
答案 1 :(得分:1)
您是否可以在数据库中添加包含已回答问题列表的用户信息?
那么当该用户回来时,您只能向他们展示未回答的问题吗?
答案 2 :(得分:1)
在用户和问题(userQuestions)之间创建多对多表,以存储已经回答的问题。然后,您只显示该用户的userQuestions表中不存在的问题。
答案 3 :(得分:0)
您将显示的每个问题都插入到带有question_id / user_id的日志表中,然后向他显示那些不匹配的问题:
SELECT [TOP 1] ...
FROM questions
WHERE question_id NOT IN (
SELECT question_id
FROM question_user_log
WHERE userd_id = <current_user>)
[ORDER BY ...]
或
SELECT [TOP 1] ...
FROM questions AS q
LEFT OUTER JOIN question_user_log AS l ON q.question_id = l.question_id
AND l.user_id = <current_user>
WHERE l.question_id IS NULL
[ORDER BY...]
显示问题后,
INSERT INTO question_user_log (question_id, user_id)
VALUES (<question shown>, <current_user>);
答案 4 :(得分:0)