[英]Question database that doesn't repeat questions that were answered correctly by user
我有一个问题表,如下所示:
ID | question | a | b | c | d | e | correct_item
1 | What's my name? | joao | pedro | jose | mateus | lucas | b
2 | How old am I? | 15 | 18 | 20 | 22 | 25 | d
3 | Where are you from? | Paris| Berlin| Tokyo| Nairobi| Rio | d
当用户访问他的个人资料页面时,有一个modal
按钮,可以从数据库中选择一个随机问题。
$busca_questoes = "SELECT * FROM questoes ORDER BY rand() LIMIT 1";
$result_questoes = mysqli_query($conexao, $busca_questoes);
$questoes = mysqli_fetch_array($result_questoes);
我想知道的是:
首先,我尝试构建第二个表来集成用户数据库和问题数据库。 代码如下:
id_table | id_question | id_user | correct
1 | 1 | 2 | yes
2 | 2 | 2 | no
3 | 1 | 1 | yes
但我发现这种策略的问题是,几乎必须手动将每个问题与用户关联起来。 当用户注册到网站时我可以这样做,但是当添加新问题时我应该怎么做?
现在我不知道该怎么做才能解决这个问题。 如果需要更多信息,请告诉我。
正如 Shadow 所评论的那样,您希望存储已经向每个用户提出的问题,无论他们是否给出了正确的答案。 您不需要存储他们尚未回答的问题。
然后,您可以使用以下查询来提取尚未向给定用户询问的随机问题:
SELECT *
FROM questions q
WHERE NOT EXISTS (
SELECT 1
FROM user_questions uq
WHERE uq.id_user = :id_user AND uq.id_question = q.id_question
)
ORDER BY rand() LIMIT 1
其中参数:id_user
是当前用户的 id。
为此,您需要大量问题,因为一旦用户查看了所有可能的问题,上述查询将返回一个空结果集。 或者,您可以将每个问题的询问日期存储在user_questions
表中,并在子查询中添加过滤器以仅排除最近看到的问题。
SELECT *
FROM questions q
WHERE NOT EXISTS (
SELECT 1
FROM user_questions uq
WHERE
uq.id_user = :id_user
AND uq.id_question = q.id_question
AND uq.date_asked > NOW() - INTERVAL 30 DAY
)
ORDER BY rand() LIMIT 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.